I. Решение XPath 1.0 с использованием XSLT 1.0 в качестве хоста :
Использование:
/*/parent[item/name = $vList]
Это преобразование :
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:my="my:my">
<xsl:output omit-xml-declaration="yes" indent="yes"/>
<xsl:strip-space elements="*"/>
<my:list>
<val>200</val>
<val>201</val>
</my:list>
<xsl:variable name="vList" select=
"document('')/*/my:list/*"/>
<xsl:template match="/">
<xsl:copy-of select="*/parent[item/name = $vList]"/>
</xsl:template>
</xsl:stylesheet>
при применении к предоставленному документу XML :
<parents>
<parent>
<item>
<name>200</name>
</item>
<item>
<name>201</name>
</item>
<item>
<name>204</name>
</item>
</parent>
<parent>
<item>
<name>203</name>
</item>
</parent>
</parents>
дает желаемый, правильный результат :
<parent>
<item>
<name>200</name>
</item>
<item>
<name>201</name>
</item>
<item>
<name>204</name>
</item>
</parent>
Примечание : Вы можете передать то, что сейчас <my:list>
, в качестве параметра преобразования.
II. Использование XPath 2.0 :
/*/parent[item/name = ('200', '201')]
Проверка на основе XSLT 2.0 ниже "
<xsl:stylesheet version="2.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:my="my:my">
<xsl:output omit-xml-declaration="yes" indent="yes"/>
<xsl:strip-space elements="*"/>
<xsl:template match="/">
<xsl:copy-of select="*/parent[item/name = ('200', '201')]"/>
</xsl:template>
</xsl:stylesheet>
когда это преобразование применяется к предоставленному XML-документу (см. Выше), получается тот же правильный результат.