我有以下文件:
<a>
<bb>abc</bb>
<cc>ccc</cc>
<dd>ddd</dd>
</a>
<a>
<bb>zz</bb>
<cc>1</cc>
<dd>2</dd>
</a>
Run Code Online (Sandbox Code Playgroud)
<cc>如果<bb>是,我怎样才能获得使用XPath 的价值zz?
Jen*_*rat 84
不确定为什么每个人都在查询兄弟姐妹,你也可以检查<bb/>与谓词谓词匹配的元素<a/>:
//a[bb/text() = "zz"]/cc/text()
Run Code Online (Sandbox Code Playgroud)
Sta*_*ley 27
你需要的是following-siblingXPath轴
//a/bb[text()="zz"]/following-sibling::cc[1]/text()
Run Code Online (Sandbox Code Playgroud)
在这里测试Xpath:http://www.xpathtester.com/obj/b55ec3ac-dfa4-4f44-81e8-f963ea4a0625
hr_*_*117 21
问:如果兄弟节点具有特定值,如何使用XPath选择节点?
因为后续兄弟和前兄弟只有"XPath Axes".如果位置得到修复,您可以使用其中一个.
但更好的是:
寻找cc是父母有子bb的价值'zz':
//cc[../bb='zz']
Run Code Online (Sandbox Code Playgroud)
首先,您的示例不是格式良好的 XML。忽略这一点并且您没有很好地描述您的意图(您究竟想在哪种条件下选择什么?),我假设您想这样做:
//cc[preceding-sibling::bb[text()="zz"]]/text()
Run Code Online (Sandbox Code Playgroud)
它选择
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"]
Run Code Online (Sandbox Code Playgroud)
你也可以写成
//bb[text()="zz"]/following-sibling::cc/text()
Run Code Online (Sandbox Code Playgroud)
这个问题的另一个解决方案是
//bb[contains(.,'zz')]/../cc/text()
解释:任何在所有子节点中bb包含字符串的内容,然后转到该使用的父节点,现在我们可以访问如此返回的文本。'zz'bbbb..cc
我希望这个解释并不复杂。
| 归档时间: |
|
| 查看次数: |
75895 次 |
| 最近记录: |