让xml具有相同的标签名称但是对于该标签名称值是不同的,所以我们期望输出像逐个事务
<swift>
<message>
<block3>
<tag>
<name>32</name>
<value>praveen</value>
</tag>
<tag>
<name>42</name>
<value>pubby</value>
</tag>
</block3>
<block4>
<tag>
<name>77</name>
<value>pravz</value>
</tag>
<tag>
<name>77</name>
<value>pubbypravz</value>
</tag>
<tag>
<name>76</name>
<value>shanmu</value>
</tag>
</block4>
</message>
</swift>
xslt
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="text"/>
<xsl:template match="/">
<xsl:for-each select="swift/message">
<xsl:for-each select ="block3/tag[name = '32']">
<xsl:value-of select="value"/>
</xsl:for-each>,<xsl:text/>
<xsl:for-each select ="block4/tag[name = '77']">
<xsl:value-of select="value"/>,<xsl:text/>
</xsl:for-each>
</xsl:for-each>
</xsl:template>
通过这上面xslt我达到了这个
praveen,pravz,pubbypravz,
需要输出:
praveen,pravz
praveen,pubbypravz
希望我们每次都需要设置一个循环,请指导我......
答案 0 :(得分:1)
嗯,你完全改变了你的第一个例子,所以我的第一个答案与你的问题不再匹配。这使我们的讨论对外人来说毫无价值。不过,我根据您的新输入数据调整了我的解决方案:
<?xml version="1.0" encoding="UTF-8" ?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="text" />
<xsl:template match="/">
<xsl:for-each select ="/swift/message/block3/tag[name='32']">
<xsl:variable name = "first-val" select="value"/>
<xsl:for-each select ="/swift/message/block4/tag[name='77']">
<xsl:value-of select="concat($first-val, ',',value)"/>
<xsl:text>
</xsl:text>
</xsl:for-each>
</xsl:for-each>
</xsl:template>
</xsl:stylesheet>
希望这有帮助。