Я бы хотел отфильтровать элементы, кроме некоторых в списке.
У меня есть этот XML:
<catalog>
<product>
<code>Y17231</code>
<pname>Test 1</pname>
</product>
<product>
<code>Y19232</code>
<pname>Test 2</pname>
</product>
<product>
<code>Y18333</code>
<pname>Test 3</pname>
</product>
</catalog>
В настоящее время я отфильтровываю все элементы, которые не начинаются с Y19* code.
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output encoding="UTF-8" indent="yes" method="xml"/>
<xsl:strip-space elements="*" />
<xsl:template match="node()|@*">
<xsl:copy>
<xsl:apply-templates select="node()|@*"/>
</xsl:copy>
</xsl:template>
<xsl:template match="product[not(matches(code, 'Y[^X]?19.*[^V]$'))]" />
</xsl:stylesheet>
Это работает, xsltransform пример, пример вывода:
<catalog>
<product>
<code>Y19232</code>
<pname>Test 2</pname>
</product>
</catalog>
Цель:
Я хотел бы расширить это с помощью функции, где я могу определить некоторые коды, которые затем не будут отфильтрованы (они будут включены в результат).
<xsl:param name="include-this" as="xs:string*" select="'Y18333','Y16222','Y12333'"/>
Таким образом, вывод должен быть следующим:
<catalog>
<product>
<code>Y19232</code>
<pname>Test 2</pname>
</product>
<product>
<code>Y18333</code>
<pname>Test 3</pname>
</product>
</catalog>
Можете ли вы помочь мне, как достичь моей цели?