2016-12-15 2 views
2

私はXPathを完全に理解していません。私は広範な検索を行い、ただちに子供たちのための解決策を見つけました。テキストノードの子孫のないドキュメント内のすべての要素のXpath?

子ノード、孫ノード、壮大な孫ノード、またはそのノード内にテキストノードを持つファミリツリー内に存在する子ノードを持たない要素を選択する必要があります。

簡単な例がある: - 私は次のXPathクエリを実行する場合

<div><p></p><p><span></span></p><p><span>notemptychild</span></p><p>notempty</p></div> 

: -

//p[not(text())] 

それは出力を以下与える: -

Element='<p/>' 
Element='<p> 
    <span/> 
</p>' 
Element='<p> 
    <span>notemptychild</span> 
</p>' 

(私はフリーフォーマットのxpathツールを使用:http://www.freeformatter.com/xpath-tester.html

最初の要素は有効な選択です。

第2要素は有効な選択です。

pの子spanにテキストノードがあるため、3番目の要素は有効な選択ではありません。

私は複雑な質問をしなかったことを願っています。

答えて

3

このXPathの、

//*[not(.//text())] 

は、テキストノードの子孫せずに文書内のすべての要素を選択します。


このXPathの、

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

は同じことを行いますが、単に空白で構成するテキストノードを可能にします。

+0

ありがとうございます。できます。私はそれが利用可能になるとすぐにそれを受け入れます。私が逃したもう一つの要求。これは '

'を選択しますが、 '

'は選択しません。このXPathで空白文字のテキストノードを無視する方法を教えてください。 –

+0

@OmarTariq:リクエストごとに2番目のXPathで回答が更新されました。 – kjhughes

+0

ありがとう、大変感謝しています。 –

関連する問題