質問: C#HtmlAgilityPackは、元のHTML文書に存在しなくても、LoadHtml関数の後にtbody要素をテーブル内のDOMツリーに追加します。どうすればこの機能を無効にできますか? 私のアルゴリズムは、DOMツリーを横断することによっていくつかのXPATH式を作成し、元の文書内に存在しないtbody要素は、SelectNodeが目的のアイテムを見つけられないようにします。これを理解するのに多くの時間を費やしました。 SelectNodesにHtmlAgilityPackによって追加されたノードも考慮させることは可能ですか? 例: ``` data ``` 私のアプリケーションはこの 'XPATH'を生成して 'data'を抽出します:// table / **tbody** / tr / td 式中のtbodyタグは、HtmlAgilityPackがhtmlAgilityPackによってHTMLコードを解析した後のDOMツリー内に存在するため、HtmlAgilityPackがそれを追加したために追加されたため追加されました。そのための ``` doc.DocumentNode.SelectNodes("//table/tbody/tr/td"); ``` 失敗するでしょう。 つまり、tr要素(HtmlElement)の親のTagNameは 'TABLE'ではなく 'TBODY'に等しくなります。また、私は多くの異なるWebサイトを解析しているので、これは1つの状況です。 SelectNodesはHtmlDocument.LoadHtmlの後にあるDOMツリーではなく元のHTMLコードで検索します。または、それによって追加された 'virtual'要素は考慮しません。
回答: 完全な階層を使用する必要はありません。 必要なものがすべて`td`場合は、以下を使用してください: ``` doc.DocumentNode.SelectNodes("//table//td"); ``` または`tbody`ノードを無視して気になる階層をすべて取得してください: ``` doc.DocumentNode.SelectNodes("//table//tr/td"); ```