質問: htmlDoc.DocumentNode.SelectSingleNode("(//div[@class='TableContainer'])[" + index + "]"); if (el != null) { foreach (HtmlNode node in el.SelectNodes("//text()")) { Debug.WriteLine("text=" + node.InnerText.Replace(" ", " ")); } } ``` それは、文書全体の`text=line`を出力します。 `//text()`に何か問題があると確信してい`//text()` 、これは私がここで見つけたスニペットですが、別のやり方を知らず、狂ってしまいました。
回答: 相対的なXPath式を使用する必要があります。これは、 `el`コンテキストノードに対して相対的です ``` HtmlAgilityPack.HtmlNode el = htmlDoc.DocumentNode.SelectSingleNode("(//div[@class='TableContainer'])[" + index + "]"); if (el != null) { foreach (HtmlNode node in el.SelectNodes(".//text()")) { Debug.WriteLine("text=" + node.InnerText.Replace(" ", " ")); } } ``` `"//text()"`は、ドキュメントルートノードのすべての子孫テキストノードを選択します 詳細については、XPath仕様のロケーションパスと短縮構文を参照してください。 > * `//para`はドキュメントルートのすべてのpara子孫を選択し、コンテキストノードと同じドキュメント内のすべてのpara要素を選択します > * `.//para`は、コンテキストノードのpara要素子孫を選択します。 >