XPath可以跨XML的两个子树进行外键查找吗?
假设我有以下XMLXPath可以跨XML的两个子树进行外键查找吗?,xml,xslt,xpath,subtree,xslkey,Xml,Xslt,Xpath,Subtree,Xslkey,假设我有以下XML <root> <base> <tent key="1" color="red"/> <tent key="2" color="yellow"/> <tent key="3" color="blue"/> </base> <bucket> <tent key="1"/> <tent key="3"/> </bu
<root>
<base>
<tent key="1" color="red"/>
<tent key="2" color="yellow"/>
<tent key="3" color="blue"/>
</base>
<bucket>
<tent key="1"/>
<tent key="3"/>
</bucket>
</root>
…返回“bucket”包含“red”和“blue”的XPath是什么?我认为这会起作用:
/root/base/tent[/root/bucket/tent/@key = @key ]/@color
这不漂亮。与任何查找一样,您需要使用current():
/root/bucket[/root/base/tent[@key=current()/tent/@key]/@color='blue'或/root/base/tent[@key=current()/tent/@key]/@color='red']如果使用XSLT,我建议设置一个键:
<xsl:key name="tents" match="base/tent" use="@key" />
那你就可以了
key('tents', /root/bucket/tent/@key)/@color
或者,如果$bucket
是特定的
元素
key('tents', $bucket/tent/@key)/@color
JeniT在这里列出了相应的响应/代码。在遍历XML文档之前,需要创建密钥,然后对该密钥执行匹配。xpath适用于给定的XML,但不是通用解决方案。如果XML为:。。。剪然后它将返回所有三种颜色。这个XPath表达式根本不选择任何“bucket”节点。它选择“颜色”属性。所以这个答案是错误的。dacracot,请接受Jeni的答案,这是一个很好的答案。当前接受的答案中的XPath表达式根本没有选择任何“bucket”节点。它选择“颜色”属性。所以这个答案是错误的。达克拉科特,请接受杰尼的回答,这是一个很好的回答
key('tents', $bucket/tent/@key)/@color