我有以下文件:
<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/>
-elements 与 的谓词匹配的<a/>
谓词:
//a[bb/text() = "zz"]/cc/text()
您需要的是following-sibling
XPath 轴
//a/bb[text()="zz"]/following-sibling::cc[1]/text()
在此处测试 Xpath:http ://www.xpathtester.com/obj/b55ec3ac-dfa4-4f44-81e8-f963ea4a0625
问:如果兄弟节点具有特定值,如何使用 XPath 选择节点?
因为following-siblings和previous-siblings只有“XPath Axes”,如果位置固定,您可以使用其中之一。
但更好:
寻找cc
父母是否bb
有价值的孩子'zz'
:
//cc[../bb='zz']
首先,您的示例不是格式良好的 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()
这个问题的另一个解决方案是
//bb[contains(.,'zz')]/../cc/text()
解释:任何bb
包含'zz'
字符串的所有子节点,bb
然后转到该bb
使用的父节点..
,现在我们可以访问cc
返回的文本。
我希望解释并不复杂。
//a/cc[../bb='zz']/text()
//a : 选择所有 'a' 元素,无论它在哪里。
//a/cc : 选择作为 'a' 元素的子元素的 'cc' 元素(无论 a 在哪里)。
.. :选择当前节点的父节点。
[../bb='zz'] : 其中兄弟 'bb' 元素的值为 zz。