我有以下文件:
<a>
<bb>abc</bb>
<cc>ccc</cc>
<dd>ddd</dd>
</a>
<a>
<bb>zz</bb>
<cc>1</cc>
<dd>2</dd>
</a>
<cc>
如果<bb>
是,如何获得使用XPath的价值zz
?
Answers:
不确定为什么每个人都在查询兄弟姐妹,您还可以<bb/>
从<a/>
-谓词中检查与谓词匹配的-elements :
//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
问:如果同级节点具有特定值,如何使用XPath选择节点?
因为只有“ XPath轴”用于后继兄弟和前继兄弟,所以如果位置固定,则可以使用其中之一。
但更好的是:
寻找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。
解决此问题的另一种方法是
//bb[contains(.,'zz')]/../cc/text()
说明:任何bb
包含'zz'
在所有子节点的字符串bb
,然后去的父节点即bb
使用..
了,现在我们可以访问cc
,从而返回文本。
我希望解释不复杂。