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