如何选择元素取决于使用xslt中的文本内容

时间:2012-05-31 07:17:16

标签: xml xslt

源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”作为参数,但我不知道该怎么做

2 个答案:

答案 0 :(得分: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>

答案 1 :(得分: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>