HTML Agility Packを使用してHTMLソースコードに改行を追加する

html html-agility-pack vb.net

質問

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ファイルを不明瞭にするので、これをデフォルトで実装するべきだと思います。

私はこの質問を(私の正確な問題です) ここに見ましが、答えは私のために働いていない(多分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は合法ですか? はい、理由を学ぶ