質問: 私は現在のHTMLレイアウトを持っています ``` //table[1] //table[2] //table[1]//table[1] INFO 1 INFO 2 INFO 3 INFO 4 //table[1]//table[2] Name Quantity Apples 10 //table[1]//table[3] ``` 私は`//table[1]//table[2]`内のデータを取得しようとしていますが、次のものについてはnull HtmlNode( `System.NullReferenceException` )が続きます。 **は動作しません:** `doc.DocumentNode.SelectSingleNode("//table[2]//tbody//tr//td//table[2]//tbody//tr");` 、 なぜ私は`//table[1]//table[1]`データを取得しようとすると、この構文でうまく動作するのかわかりません **動作します:** `doc.DocumentNode.SelectSingleNode("//table[2]//tbody//tr//td//table[1]//tbody//tr");` Html Agility Packのインデックス作成の仕組みを誤解していますか?
回答: `//table[2]`は、XPathで**同じ親の** 2番目の``要素を返し`` 。 > ( `]` )は、( `//`および`/` )よりも高い優先順位(優先順位)を持ちます。 [ [参考のために ] > > あなたのケースでは、各``に``が1つしかないため、Xpath式は何も返しませんでした。可能な解決策の1つは、括弧を入れて優先順位を変更することです。 ``` (//table[2]//tbody//tr//td//table)[2]//tbody//tr ``` Xpathの上に、内側のXPath `//table[2]//tbody//tr//td//table`から返されたすべての``から2番目の``要素を取得し`//table[2]//tbody//tr//td//table` 。その後、その``から子孫`//tbody//tr`要素を引き続き返します。