3

過去数日間、この問題を解決するのに苦労しています。たとえば、HTML ドキュメントからすべての text() を取得したいのですが、テキスト データを含むノードの XPath を知り、取得したいだけです。例:

 foreach (var textNode in node.SelectNodes(".//text()")) 
 //do stuff here 

ただし、を使用して textNode の XPath を取得する場合は、ノードtextNode.XPathを含む完全な XPath を取得します。#text

/html[1]/body[1]/div[1]/a[1]/#text

それでも、テキストの包含ノードのみが必要です。たとえば、次のようになります。

/html[1]/body[1]/div[1]/a[1]

テキストを含むすべてのノードを取得するが、含まれるノードまでの XPath のみを取得するためのより良い XPath ソリューションを誰かに教えてもらえますか?

4

2 に答える 2

3

の代わりに:

.//text() 

使用:

.//*[normalize-space(text())]

これにより、少なくとも 1 つの非空白のみのテキスト ノードの子を持つコンテキスト (現在の) ノードのすべての「リーフ要素」の子孫が選択されます。

于 2013-03-20T03:59:13.403 に答える
2

なぜあなたはしないのですか

string[] elements = getXPath(textNode).Split(new char[1] { '/' });
return String.Join("/", elements, 0, elements.Length-2);
于 2013-03-20T01:44:48.027 に答える