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 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 回答
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 回答