Aşağıdaki belgeye sahibim:
<a>
<bb>abc</bb>
<cc>ccc</cc>
<dd>ddd</dd>
</a>
<a>
<bb>zz</bb>
<cc>1</cc>
<dd>2</dd>
</a>
Nasıl değerini alabilirsiniz <cc>
eğer XPath kullanarak <bb>
olduğunu zz
?
Aşağıdaki belgeye sahibim:
<a>
<bb>abc</bb>
<cc>ccc</cc>
<dd>ddd</dd>
</a>
<a>
<bb>zz</bb>
<cc>1</cc>
<dd>2</dd>
</a>
Nasıl değerini alabilirsiniz <cc>
eğer XPath kullanarak <bb>
olduğunu zz
?
Yanıtlar:
Neden herkesin kardeşleri sorguladığından emin değilsiniz, aynı zamanda 's yüklemindeki <bb/>
yüklemle eşleşen -elementleri de kontrol edebilirsiniz <a/>
:
//a[bb/text() = "zz"]/cc/text()
*-sibling
eksen kullanmadın . +1 olsa da.
İhtiyacınız olan şey following-sibling
XPath ekseni
//a/bb[text()="zz"]/following-sibling::cc[1]/text()
Xpath'i burada test edin: http://www.xpathtester.com/obj/b55ec3ac-dfa4-4f44-81e8-f963ea4a0625
S: Kardeş düğüm belirli bir değere sahipse, XPath kullanarak bir düğüm nasıl seçilir?
Sonraki kardeşler ve önceki kardeşler için yalnızca "XPath Eksenleri" olduğundan, konum sabitse bunlardan birini kullanabilirsiniz.
Ama daha iyi:
için bak cc
ebeveyn vardı çocuk sahibi bb
değerle 'zz'
:
//cc[../bb='zz']
//a[bb = 'zz']/cc
.
Öncelikle, örneğiniz iyi biçimlendirilmiş XML değildir. Bunu göz ardı ederek ve niyetlerinizi çok iyi tanımlamadığınıza göre (Hangi durumda tam olarak neyi seçmek istiyorsunuz?), Bunu yapmak istediğinizi varsayıyorum:
//cc[preceding-sibling::bb[text()="zz"]]/text()
Seçer
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"]
Ayrıca yazabilirsin
//bb[text()="zz"]/following-sibling::cc/text()
Lütfen spesifikasyona bakın , çok şey öğreneceğiniz çok iyi okunabilir bazı örnekler var.
//a/cc[../bb='zz']/text()
// a: Nerede olursa olsun tüm 'a' öğelerini seçer.
// a / cc: 'a' öğesinin alt öğesi olan 'cc' öğelerini seçer (a nerede olursa olsun).
..: Geçerli düğümün ebeveynini seçer.
[../bb='zz ']: kardeş' bb 'öğesinin değeri zz'dir.
Bu problem için başka bir çözüm ise
//bb[contains(.,'zz')]/../cc/text()
Açıklama : Tüm çocuk düğümlerinde dizge bb
içeren herhangi bir şey, daha sonra bunu kullanarak ebeveyn düğümüne gitmiş , şimdi bu şekilde dönen metne erişebiliyoruz .'zz'
bb
bb
..
cc
Umarım bu açıklama karmaşık değildir.