Xml 用XPath采摘樱桃
鉴于以下情况:Xml 用XPath采摘樱桃,xml,xpath,Xml,Xpath,鉴于以下情况: <xml> <cls> <cl id="foo"> <a>1</a> <b>1</b> </cl> <cl id="bar"> <a>4</a> <b>2</b>
<xml>
<cls>
<cl id="foo">
<a>1</a>
<b>1</b>
</cl>
<cl id="bar">
<a>4</a>
<b>2</b>
</cl>
<cl id="foo">
<a>1</a>
<b>3</b>
</cl>
</cls>
<orgs>
<org clid="foo">
</org>
<org clid="foo">
</org>
<org clid="bar">
</org>
<org clid="bar">
</org>
<org clid="foo">
</org>
</orgs>
</xml>
1.
1.
4.
2.
1.
3.
如何选择xml/orgs/org
s,其中org的clid
与xml/cls/cl
中的一个匹配(通过其id
属性),其中cl/a
的值为1
这有点复杂,我不知道如何处理这样的关系
最好与XPath 1.0兼容。
XPath
表达式:
//orgs/org[@clid=preceding::cls/cl[a=1]/@id]
尝试以下方法(XPath 1.0表达式):
输出:
<org clid="foo">
</org><org clid="foo">
</org><org clid="foo">
评论:
我动态地获取
id
字符串这个XPath 1.0表达式
//orgs/org[@clid=//cl[a=1]/@id]
将根据请求,选择所有org
元素,其@clid
属性值等于至少一个cl
元素的@id
属性值,该元素的子a
元素的值为1
:
<org clid="foo">
</org>
<org clid="foo">
</org>
<org clid="foo">
</org>
试试这个:
org
其中clid
等于cl
中具有a=1的id
//xml/orgs/org[@clid = //xml/cls/cl[a=1]/@id]
或者,如果您不想保留xml
、org
和cls
标记并将其缩短(但如果您的xml较大/复杂,最好保留原始标记):
谢谢,我稍微修改了一下:xml/orgs/org[@clid=/xml/cls/cl[a/=1]/@id]
//xml/orgs/org[@clid = //xml/cls/cl[a=1]/@id]
//org[@clid = //cl[a=1]/@id]