2017-03-07 106 views
1

我正在使用HTML敏捷包修改HTML文件。使用HTML敏捷包在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#)。

任何人都可以帮忙吗?

+0

您是否添加了'newLineNode'?这将是'Dim newLineNode As HtmlNode = HtmlNode.CreateNode(“\ r \ n”)''。然后你会使用像'tr.AppendChild(div1)'...'tr.AppendChild(newLineNode)'...'tr.AppendChild(div2)' – Bugs

+0

我试过这个,但是它在我的内容中添加了'\ r \ n' HTML,它不会回到行。 – chateaur

+0

'tables.descendants(“tr”).Tarray'给我带来了一个编译错误。也许这是这个问题?你能否在问题中提供你的初始HTML或至少是一个样本? – Bugs

回答

2

没有写在任何时间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#中工作。

+0

谢谢,Environment.NewLine会诀窍! – chateaur

0

在此基础上answer你需要在表示回车(\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并提供编译对我来说错误。由于这个问题超出了这个问题的范围,并且您没有将其作为一个问题提出,所以我会假设它对您有用。