XPath 根据基本同级值获取同级
Posted
技术标签:
【中文标题】XPath 根据基本同级值获取同级【英文标题】:XPath to get siblings based on base-sibling value 【发布时间】:2022-01-03 14:06:33 【问题描述】:我正在尝试构建一个 XPath 表达式以根据基本兄弟的数据来查找兄弟。
示例 XML:
<data>
<meta>
<material>123456</material>
<type>a</type>
</meta>
<meta>
<material>456789</material>
<type>b</type>
</meta>
<dataobj0>
<material>123456</material>
<somedata>Test0</somedata>
</dataobj0>
<dataobj0>
<material>456789</material>
<somedata>Test1</somedata>
</dataobj0>
<dataobj1>
<material>123456</material>
<somedata>Test2</somedata>
</dataobj1>
<dataobj1>
<material>456789</material>
<somedata>Test3</somedata>
</dataobj1>
</data>
我遍历所有<meta>
元素,对于每个元元素,我想找到匹配的dataobj0 和dataobj1。所以当我在<meta><material>123456</material></meta>
时,我想访问/data/dataobj0[material = "123456"]
和/data/dataobj1[material = "123456"]
我虽然是这样的:
../dataobj0[material = ./material]
或 following-sibling::dataobj0[material = ./material]
可以工作,但在这种情况下,./material
已经有兄弟姐妹的号码。
任何想法,我怎样才能在这里获得当前元元素的materialnumber?
【问题讨论】:
【参考方案1】:例如要获取第二个<meta>
(带有<type>b</type>
的那个)对应的dataobj,使用
//*[starts-with(name(),"dataobj")][material=(//meta/material)[2]]/somedata
如果您使用的是 xpath>1.0,您可以像这样配对它们:
//*[starts-with(name(),"dataobj")][material=(//meta/material)[2]]/(somedata/text() | //meta[.//material=material][2]//type/text())
并得到这个输出:
b
Test1
Test3
【讨论】:
以上是关于XPath 根据基本同级值获取同级的主要内容,如果未能解决你的问题,请参考以下文章