1

他の方法ですでに見つけた明示的な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);

ところで:これは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]"
4

2 に答える 2

0

#textを関数text()に置き換えることで、それを機能させることができました。そもそもなぜXPathをそのように出力しなかったのかわかりません。

HtmlNode same = doc.DocumentNode.SelectSingleNode(node.XPath.Replace("#text","text()");
于 2010-08-15T03:30:32.933 に答える
0

XPathは「#text[2]」で終わります。これは「2番目の「テキスト」属性」を意味します。属性はノードではなく、ノードのメタデータです。
これは、XPathで発生した一般的な問題です。つまり、XPath操作で絶対にノードを抽出する必要があるのに、属性の値が必要です。

これに使用した解決策は、XPathフェッチを、文字列の属性部分を検出して削除し(myXPathString.LastIndexOf( "#")メソッド呼び出しを介して)、切り捨てられたmyXPathStringを使用してフェッチするものでラップすることです。ノードを作成し、2番目のステップとして目的の属性値を収集します。

お役に立てば幸い、
J

于 2011-01-07T19:25:49.040 に答える