0

データベースのデータからいくつかのテーブルを作成しています。多くの国際的な情報源からのものなので、エンコードの問題がありましたが、すべて解決したと思います. しかし、今は奇妙な出力が表示されており、その理由がわかりません。

これは VS2010 の C# アプリです。デバッグで実行すると、クラスの文字列が次のように始まることがわかります。

Animal and vegetable oils  1 < 5 MW <br>5-50 MW  30 <br>

しかし、私が割り当てると:

td = htmlDoc.CreateElement("td");
td.Attributes.Add("rowspan", "5");
td.Attributes.Add("valign", "top");
td.InnerHtml = this.DRGuideNote.ToString();

td.InnerHtml ショー

Animal and vegetable oils  1 < 5=\"\" mw=\"\"><br>5-50 MW  30 <br>

そのテキストに等号とエスケープされた引用符を入れるのはなぜですか??? すべてのデータではなく、いくつかのファイルだけです。何か案は?(PS. 表示されない文字列に html ブレークがあります。html を無視するように投稿するにはどうすればよいですか?「4 つのスペースでインデントを試みましたが、うまくいかなかったようです?)

4

1 に答える 1

1

HTML Agility Pack の HTML パーサーは<、 を HTML タグの開始文字として処理しています。そのため、5 と MW を解析すると、タグの中にあると見なされ、タグ属性として扱われます。この処理は、 に遭遇すると停止し、<br>強制的にタグを閉じます。

ブラウザーで機能する理由は、ブラウザーは一般に、無効な HTML を処理するための HTML5 仕様に従っているためです。仕様には、無効な HTML を処理する方法に関する多くの規則があり、意図が何であるかを理解することを目的としています。この状況では、仕様では、スペースが続くカラットはテキストとして扱われるべきであると述べています。HAP のパーサーは、この特定のエッジ ケースを処理しません。したがって、これはバグではなく、HAP のネイティブ HTML パーサーの制限です。

HAP に代わるものは、完全な HTML5 パーサー (実際には Firefox と同じ HTML パーサー) を使用するCsQuery ( nuget ) であり、この種のマークアップを処理できます。

于 2013-03-05T18:30:50.700 に答える