1

我是 XSLT 的初学者。

我的源 XML 如下

<Options>
    <Option>
        <Data>Data1</Data>
        <Type>A</Type>
    </Option>
    <Option>
        <Data>Data2</Data>
        <Type>B</Type>
    </Option>
    <Option>
        <Data>Data3</Data>
        <Type>C</Type>
    </Option>
    <Option>
        <Data>Data4</Data>
        <Type>D</Type>
    </Option>
    ...
</Options>

我有用于过滤上述方法的结果的参数,如下所示

<xsl:param name="filterType" select="'A,C'"/>

输出应如下所示:

<Result>
     <Data Type="A">Data1<Data>
     <Data Type="C">Data3<Data>
</Result>

下面是我创建的 XSLT:

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
    version="1.0">

    <xsl:param name="filterType" select="'A,C'"/>
    <xsl:template match="Options">
       <xsl:element name="Result">
         <xsl:apply-templates select="Option"/>
       </xsl:element>
    </xsl:template?

    <xsl:template match="Option">
       <xsl:element name="Data">
           <xsl:attribute name="Type">
               <xsl:value-of select="Type"/>
           </xsl:attribute>
           <xsl:value-of select="Data"/>
       </xsl:element>
    </xsl:template?
</xsl:stylesheet>

在为标签应用模板时,'Option'我需要使用filterType. 我怎样才能做到这一点?请帮忙。

4

1 回答 1

2

我想你只是想要

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
    version="1.0">

    <xsl:param name="filterType" select="'A,C'"/>

    <xsl:variable name="filter" select="concat(',', $filterType, ',')"/>

    <xsl:template match="Options">
       <Result>
         <xsl:apply-templates select="Option[contains($filter, concat(',', Type, ','))]"/>
       </Result>
    </xsl:template>

    <xsl:template match="Option">
       <Data Type="{Type}">
         <xsl:value-of select="Data"/>
       </Data>
    </xsl:template>

</xsl:stylesheet>
于 2012-10-24T11:07:59.593 回答