我想选择另一个节点中不存在的所有元素。
<root>
<users>
<array>
<name>John</name>
<age>30</age>
</array>
<array>
<name>Joe</name>
<age>30</age>
</array>
<array>
<name>Lou</name>
<age>30</age>
</array>
</users>
<selected_users>
<name>Joe</name>
<age>30</age>
</selected_users>
</root>
所以我想从这个列表中得到的是John和Lou,因为它们没有在所选用户节点下列出..
答案 0 :(得分:4)
这是一种简单易行的方法:
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output indent="yes" method="text"/>
<xsl:template match="users/array/name[not(.=/*/selected_users/name)]">
<xsl:value-of select="concat(., ' ')"/>
</xsl:template>
<xsl:template match="text()"/>
</xsl:stylesheet>
在提供的XML文档上应用此转换时:
<root>
<users>
<array>
<name>John</name>
<age>30</age>
</array>
<array>
<name>Joe</name>
<age>30</age>
</array>
<array>
<name>Lou</name>
<age>30</age>
</array>
</users>
<selected_users>
<name>Joe</name>
<age>30</age>
</selected_users>
</root>
产生了想要的正确结果:
John Lou
注意强>:
如果要在变量中获取所需的name
元素,请使用:
<xsl:variable name="vSomeName" select=
"/*/users/array/name[not(.=/*/selected_users/name)]"/>
答案 1 :(得分:2)
您可以使用此xpath:
/*/users/array/name[not(.=/*/selected_users/name)]