使用xslt从xml获取数据

时间:2011-05-14 05:37:47

标签: xml xslt

让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

希望我们每次都需要设置一个循环,请指导我......

1 个答案:

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

希望这有帮助。