2017-03-07 36 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並提供編譯對我來說錯誤。由於這個問題超出了這個問題的範圍,並且您沒有將其作爲一個問題提出,所以我會假設它對您有用。