使用 HTML Agility Pack 在 HTML 源代码中添加换行符
Add newline in HTML source code using HTML Agility Pack
我正在使用 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 文件不清楚。
我看到了这个问题(这是我的确切问题)here 但答案对我不起作用(可能是因为 VB.NET 而答案是 C#)。
有人能帮忙吗?
基于此 answer,您需要添加一个代表马车 Return (\r
) 和换行符 (\n
) 的节点:
Dim newLineNode As HtmlNode = HtmlNode.CreateNode("\r\n")
根据您的评论:
I tried this but it adds '\r\n' in my HTML, it's not going back to line.
您已经尝试过了,但它打印的是字符串文字“\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
确实为我提供了一个编译错误。由于这超出了这个问题的范围,而且您还没有将其作为问题提出,所以我假设它对您有用。
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())
不幸的是,这可能是为什么 question you linked to was not marked answered - 输出:
<div>\r\n<div></div>\r\n<div></div>\r\n</div>
最后,\r\n
尝试 Environment.NewLine
而不是使用换行字符串, 确实 工作并输出:
<div>
<div></div>
<div></div>
</div>
在 C# 中以任一方式工作。
我正在使用 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 文件不清楚。
我看到了这个问题(这是我的确切问题)here 但答案对我不起作用(可能是因为 VB.NET 而答案是 C#)。
有人能帮忙吗?
基于此 answer,您需要添加一个代表马车 Return (\r
) 和换行符 (\n
) 的节点:
Dim newLineNode As HtmlNode = HtmlNode.CreateNode("\r\n")
根据您的评论:
I tried this but it adds '\r\n' in my HTML, it's not going back to line.
您已经尝试过了,但它打印的是字符串文字“\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
确实为我提供了一个编译错误。由于这超出了这个问题的范围,而且您还没有将其作为问题提出,所以我假设它对您有用。
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())
不幸的是,这可能是为什么 question you linked to was not marked answered - 输出:
<div>\r\n<div></div>\r\n<div></div>\r\n</div>
最后,\r\n
尝试 Environment.NewLine
而不是使用换行字符串, 确实 工作并输出:
<div>
<div></div>
<div></div>
</div>
在 C# 中以任一方式工作。