2

ソース xml は次のようになります。

<source>
    <idset>
        1,2,4
    </ideset>
    <c id = "1">aaa</c>
    <c id = "2">bbb</c>
    <c id = "3">ccc</c>
    <c id = "4">ddd</c>
</source>

次のように、idset コンテンツ「1,2,4」を使用して新しい xml を生成します。

<result>
    aaabbbddd
</result>

テキスト「1,2,4」をパラメーターとして使用する必要があると思いますが、これを行う方法がわかりません

4

2 に答える 2

0

XSLT 1.0ソリューション

<xsl:stylesheet version="1.0"
 xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
 <xsl:output omit-xml-declaration="yes" indent="yes"/>
 <xsl:strip-space elements="*"/>

 <xsl:template match="/*">
  <result>
   <xsl:apply-templates select="c"/>
  </result>
 </xsl:template>
 <xsl:template match=
 "c[not(contains(concat(',', normalize-space(/*/idset), ','),
                 concat(',', @id, ',')
                 )
        )
    ]"/>
</xsl:stylesheet>

この変換が提供されたXMLドキュメントに適用される場合:

<source>
    <idset>
    1,2,4
    </idset>
    <c id = "1">aaa</c>
    <c id = "2">bbb</c>
    <c id = "3">ccc</c>
    <c id = "4">ddd</c>
</source>

必要な正しい結果が生成されます:

<result>aaabbbddd</result>
于 2012-05-31T12:38:50.233 に答える
0

前の質問に基づいて XSLT 2.0 を使用しています...

入力 XML

<source>
    <idset>
        1,2,4
    </ideset>
    <c id = "1">aaa</c>
    <c id = "2">bbb</c>
    <c id = "3">ccc</c>
    <c id = "4">ddd</c>
</source>

XSLT 2.0

<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:output indent="yes"/>
    <xsl:strip-space elements="*"/>

    <xsl:template match="/source">
        <result>
            <xsl:apply-templates select="c[@id=tokenize(normalize-space(current()/idset),',')]/text()"/>            
        </result>
    </xsl:template>
</xsl:stylesheet>

XML 出力

<result>aaabbbddd</result>
于 2012-05-31T07:33:06.083 に答える