使用HTML Agility Pack在HTML源代碼中添加換行符

html html-agility-pack vb.net

我正在使用HTML Agility Pack修改HTML文件。

以下是包含表格的HTML文件的示例:

Dim document As New HtmlDocument
Dim tables As Array

document.Load(path_html)

Dim div1 As HtmlNode = HtmlNode.CreateNode("<div></div>")
Dim div2 As HtmlNode = HtmlNode.CreateNode("<div></div>")

tables = document.DocumentNode.Descendants("table").ToArray()

For Each tr As HtmlNode In tables.Descendants("tr").ToArray
   tr.AppendChild(div1)
   tr.AppendChild(div2)
Next

document.save(path_html)

這是HTML文件中的結果:

<div></div><div></div>

我想要的是:

<div></div>
<div></div>

我認為這應該默認實現,因為它使我的HTML文件不清楚。

我在這裡看到了這個問題(這是我的確切問題) 但答案對我不起作用(也許是因為VB.NET,答案是C#)。

有人可以幫忙嗎?

一般承認的答案

沒有在很長一段時間內寫過任何vb.net ,所以首先在C#嘗試過這個:

var document = new HtmlDocument();
var div = HtmlNode.CreateNode("<div></div>");
var newline = HtmlNode.CreateNode("\r\n");
div.AppendChild(newline);
for (int i = 0; i < 2; ++i)
{
    div.AppendChild(HtmlNode.CreateNode("<div></div>"));
    div.AppendChild(newline);
}
document.DocumentNode.AppendChild(div);
Console.WriteLine(document.DocumentNode.WriteTo());

效果很好 - 輸出:

<div>
<div></div>
<div></div>
</div>

然後想,“ 沒辦法....它不可能 ” - 請注意註釋的行:

Dim document = New HtmlDocument()
Dim div = HtmlNode.CreateNode("<div></div>")
' this writes the literal string...
Dim newline = HtmlNode.CreateNode("\r\n")
' this works!
' Dim newline = HtmlNode.CreateNode(Environment.NewLine)
div.AppendChild(newline)
For i = 1 To 2
    div.AppendChild(HtmlNode.CreateNode("<div></div>"))
    div.AppendChild(newline)
Next
document.DocumentNode.AppendChild(div)
Console.WriteLine(document.DocumentNode.WriteTo())

不幸的是它是這樣的,也可能是為什麼你鏈接問題沒有標記為答案 - 輸出:

<div>\r\n<div></div>\r\n<div></div>\r\n</div>

最後,不要使用新行字符串作為\r\n嘗試使用Environment.NewLine ,它可以工作和輸出:

<div>
<div></div>
<div></div>
</div>

在C#中以任何一種方式工作。


熱門答案

根據此答案,您需要添加一個表示回車符( \r )和換行符( \n )的節點:

Dim newLineNode As HtmlNode = HtmlNode.CreateNode("\r\n")

根據您的評論:

我嘗試了這個,但它在我的HTML中添加'\ r \ n',它不會回到行。

你已經嘗試了這個,而是打印字符串文字“\ r \ n”。我也設法複製了這個問題。

而是使用<br>作為換行符:

Dim newLineNode As HtmlNode = HtmlNode.CreateNode("<br>")

根據您的示例代碼,您的代碼將如下所示:

Dim newLineNode As HtmlNode = HtmlNode.CreateNode("<br>")

For Each tr As HtmlNode In tables.Descendants("tr").ToArray
   tr.AppendChild(div1)
   tr.AppendChild(newLineNode)
   tr.AppendChild(div2)
Next

但是tables.Descendants("tr").ToArray確實為我提供了編譯錯誤。由於這不屬於這個問題的範圍,你沒有提出它作為一個問題,我會假設它適合你。



Related

許可下: CC-BY-SA with attribution
不隸屬於 Stack Overflow
這個KB合法嗎? 是的,了解原因
許可下: CC-BY-SA with attribution
不隸屬於 Stack Overflow
這個KB合法嗎? 是的,了解原因