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 に答える