XPathの問題は、 "式をノード集合に評価する必要があります。"エラー

.net c# html-agility-pack node-set xpath

質問

私はすでに別の方法で見つけた明示的なXPathによって単一のノードを取得するのに問題があります。私はノードを持っており、そのXPathを取得できますが、今回同じノードをnode.XPath経由で再度取得しようとすると、「式はノードセットに評価される必要があります」というエラーが返されます。これは動作しませんか?私はHtmlDocumentのC#btwでHtmlAgilityPackを使用しています。

HtmlDocument doc = new HtmlDocument();
doc.Load(@"..\..\test1.htm");
HtmlNode node = doc.DocumentNode.SelectSingleNode("(//node()[@id='something')])[first()]");
HtmlNode same = doc.DocumentNode.SelectSingleNode(node.XPath);

BTW:これはnode.XPathの値です:

"/html[1]/body[1]/table[1]/tr[1]/td[1]/div[1]/div[1]/div[2]/table[1]/tr[1]/td[1]/div[1]/div[1]/table[1]/tr[1]/td[1]/div[1]/div[1]/div[4]/div[2]/div[1]/div[1]/div[4]/#text[2]"

受け入れられた回答

#textを関数text()に置き換えることで、私はそれを動作させることができました。なぜ私は最初にそのようにXPathを発行しただけではないのか分かりません。

HtmlNode same = doc.DocumentNode.SelectSingleNode(node.XPath.Replace("#text","text()");

人気のある回答

XPathは "#text [2]"で終わります。これは "2番目の 'text'属性"を意味します。属性はノードではなく、ノードメタデータです。
これは私がXPathで持っていた共通の問題です:XPath操作が絶対にノードを抽出しなければならないうちに、属性の値を必要とする。

私がこれを使用した解決策は、XPathフェッチをmyXPathString.LastIndexOf( "#")メソッド呼び出しを介して文字列の属性部分を検出して取り除くものでラップしてから、切り捨てられたmyXPathStringを使用して第2のステップとして所望の属性値を収集する。

希望は、
J



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