私は次の文書を持っています:
<a>
<bb>abc</bb>
<cc>ccc</cc>
<dd>ddd</dd>
</a>
<a>
<bb>zz</bb>
<cc>1</cc>
<dd>2</dd>
</a>
どのように私はの値を得ることができ<cc>
た場合にXPathを使用して<bb>
いるのzz
?
私は次の文書を持っています:
<a>
<bb>abc</bb>
<cc>ccc</cc>
<dd>ddd</dd>
</a>
<a>
<bb>zz</bb>
<cc>1</cc>
<dd>2</dd>
</a>
どのように私はの値を得ることができ<cc>
た場合にXPathを使用して<bb>
いるのzz
?
回答:
誰もが兄弟を照会している理由がわからない場合は<bb/>
、の述語の述語に一致する要素を確認することもできます<a/>
。
//a[bb/text() = "zz"]/cc/text()
*-sibling
軸を使用しなかっただけです。ただし、+ 1。
必要なのはfollowing-sibling
XPath軸です
//a/bb[text()="zz"]/following-sibling::cc[1]/text()
ここでXpathをテストします:http://www.xpathtester.com/obj/b55ec3ac-dfa4-4f44-81e8-f963ea4a0625
Q:兄弟ノードに特定の値がある場合、XPathを使用してノードを選択するにはどうすればよいですか?
次の兄弟と前の兄弟には「XPath軸」しかないため、位置が固定されている場合は、そのうちの1つを使用できます。
しかし、より良い:cc
親がbb
価値のある子供を持っているか
どうかを探してください'zz'
:
//cc[../bb='zz']
//a[bb = 'zz']/cc
。
まず、あなたの例は整形式のXMLではありません。それを見落とし、あなたがあなたの意図をあまりよく説明していなかったこと(あなたはどの条件で何を正確に選択したいですか?)、私はあなたがこれをしたいと思うと思います:
//cc[preceding-sibling::bb[text()="zz"]]/text()
選択します
TEXT VALUES OF ALL <CC> ELEMENTS
//cc /text()
THAT HAVE A PRECEDING SIBLING <BB>
[preceding-sibling::bb ]
THAT HAS TEXT VALUE EQUAL TO "zz"
[text()="zz"]
あなたが書くこともできます
//bb[text()="zz"]/following-sibling::cc/text()
//a/cc[../bb='zz']/text()
// a:場所に関係なくすべての「a」要素を選択します。
// a / cc:「a」要素の子である「cc」要素を選択します(aがどこにあるかに関係なく)。
..:現在のノードの親を選択します。
[../bb='zz ']:兄弟の' bb '要素の値はzzです。