如果您正在使用XSLT2.0,你可以利用記號化功能
<xsl:variable name="tokenizedValues" select="tokenize($values,',')"/>
這會分散你的逗號分隔字符串轉換爲值列表。那麼你可以看看你的表元素,通過檢查名屬性是在列表
<xsl:apply-templates select="table[index-of($tokenizedValues,@name)]"/>
例如,請考慮下面的XML
<tables>
<table name="A">1</table>
<table name="B">2</table>
<table name="C">3</table>
<table name="D">4</table>
<table name="E">5</table>
</tables>
當您使用以下XSLT
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" indent="yes"/>
<xsl:template match="/*">
<xsl:variable name="values">A,B,C,D</xsl:variable>
<xsl:variable name="tokenizedValues" select="tokenize($values,',')"/>
<xsl:apply-templates select="table[index-of($tokenizedValues,@name)]"/>
</xsl:template>
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>
然後輸出如下
<table name="A">1</table>
<table name="B">2</table>
<table name="C">3</table>
<table name="D">4</table>
是否有任何正則表達式e.g @name在 'A | B | C'? – sakhunzai
如果您使用的是XSLT 2.0,您應該可以使用table [matches(@name,'a | b | c |')]來執行正則表達式。正則表達式在標準XSLT 1.0中不可用。 – JLRishe