C#HtmlAgilityPack tbodyを追加する

c# html html-agility-pack xpath

質問

C#HtmlAgilityPackは、元のHTML文書に存在しなくても、LoadHtml関数の後にtbody要素をテーブル内のDOMツリーに追加します。どうすればこの機能を無効にできますか?

私のアルゴリズムは、DOMツリーを横断することによっていくつかのXPATH式を作成し、元の文書内に存在しないtbody要素は、SelectNodeが目的のアイテムを見つけられないようにします。これを理解するのに多くの時間を費やしました。

SelectNodesにHtmlAgilityPackによって追加されたノードも考慮させることは可能ですか?

例:

<table>
    <tr><td>data</td></tr>
</table>

私のアプリケーションはこの 'XPATH'を生成して 'data'を抽出します:// table / tbody / tr / td

式中のtbodyタグは、HtmlAgilityPackがhtmlAgilityPackによってHTMLコードを解析した後のDOMツリー内に存在するため、HtmlAgilityPackがそれを追加したために追加されたため追加されました。そのための

<table>
    <tr><td>data</td></tr>
</table>

失敗するでしょう。

つまり、tr要素(HtmlElement)の親のTagNameは 'TABLE'ではなく 'TBODY'に等しくなります。また、私は多くの異なるWebサイトを解析しているので、これは1つの状況です。

SelectNodesはHtmlDocument.LoadHtmlの後にあるDOMツリーではなく元のHTMLコードで検索します。または、それによって追加された 'virtual'要素は考慮しません。

人気のある回答

完全な階層を使用する必要はありません。

必要なものがすべてtd場合は、以下を使用してください:

doc.DocumentNode.SelectNodes("//table//td");

またはtbodyノードを無視して気になる階層をすべて取得してください:

doc.DocumentNode.SelectNodes("//table//td");



ライセンスを受けた: CC-BY-SA with attribution
所属していない Stack Overflow
このKBは合法ですか? はい、理由を学ぶ
ライセンスを受けた: CC-BY-SA with attribution
所属していない Stack Overflow
このKBは合法ですか? はい、理由を学ぶ