2016-10-04 31 views
1

私はXPathの魔法を理解しようとすると深刻な問題を抱えています。私たちはCのなしに、持っているどのように多くのBのカウントするようにしたい、今すぐXPath 1.0で名前空間を無視する方法は?

<a> 
    <b> 
     <c/> 
    </b> 
</a> 

は基本的に、私はいくつかのXMLとても似ています。これは、次のXPathで簡単に行うことができます。

count(*/b[not(descendant::c)]) 

は今の質問は、この単純で、任意の名前空間を無視してどのように私は、同じことをしますか?

私はそれがこのようなものだったと思いますか?

count(*/[local-name()='b']/[not(descendant::[local-name()='c'])]) 

しかし、これは正しくありません。上記のXPathと同等のものは何でしょうが、それは名前空間を無視しますか?一般的に名前空間を倒すけどにより適切に彼らと仕事しない方がよいということ

count(*[local-name()='b' and not(descendant::*[local-name()='c'])]) 

注:

count(*/b[not(descendant::c)]) 

は、次のように名前空間を無視するように書き換えることができ

+1

XPath 1.0について具体的に質問している場合は、質問に明記してください。 XPath 2.0および3.0では、任意の名前空間にローカル名がcの要素を選択するために*:cを記述することができます。 –

+1

OPは明示的にxpath-1.0としてタグ付けしましたが、タイトル編集で作成したはずです。今修正されました。 – kjhughes

+0

私の悪いです。トピックをxpath-1.0としてタグ付けするだけで十分だと思っていました。私は次回にその話題に必ず追加します。 – Kahn

答えて

2

与えられたXPath、名前空間接頭辞を割り当てて、それらをXPath式で使用します。

+0

甘い、ありがとう!この決定の前に実際のシナリオが複数の要素を持っているのかどうか疑問に思っていましたが、最終的にそこに着いたのです。そして、私はあなたの名前空間について聞いていますが、この場合、この部分の前にXMLの方法を検証しました。これは、基本的に単なるコードビハインドチェックであり、特に名前空間に依存したくないということです。 – Kahn

関連する問題