如果标签在xml中重复,那么这些数据必须通过使用xslt单独获得

时间:2011-11-02 07:17:31

标签: xslt xslt-1.0

如果假设相同的标签会被重复,但是对于那个标签值会有所不同,因为我需要使用xslt单独获取,如果我这样做,那么两个标签值是单线获取

这是我的xml:

<local>
<message>       
    <block4>            
        <tag>
            <name>72</name>
            <value>ALW103111102000001</value>
        </tag>          
        <tag>
            <name>70</name>
            <value>TESTING CITI BANK EFT9</value>
        </tag>
        <tag>
            <name>71A</name>
            <value>OUR</value>
        </tag>
        <tag>
            <name>72</name>
            <value>ipubby</value>
        </tag>
    </block4>       
</message>
</local>

这是我的xslt:

<?xml version="1.0"?>
   <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="local/message">
                 <xsl:for-each select ="block4/tag[name = '72']">
            <xsl:value-of select="value"/>
        </xsl:for-each>,<xsl:text/> 
                    <xsl:for-each select ="block4/tag[name = '72']">
            <xsl:value-of select="value"/>
        </xsl:for-each>
       </xsl:for-each>
   </xsl:template>
     </xsl:stylesheet>
输出所需的输出为:

ALW103111102000001,ipubby

1 个答案:

答案 0 :(得分:0)

您要问的是,您希望将所有标记元素与名称为72匹配,并将值连接到一行。

目前,您正在嵌套 xsl:for-each 语句,这会导致元素被选中两次,并且输出行会重复。

您需要做的只是选择第一个标签

<xsl:value-of select="block4/tag[name = '72'][1]/value"/>

然后你就可以得到其余的标签......

<xsl:for-each select="block4/tag[name = '72'][position() > 1]">

请注意,最好使用 xsl:apply-templates 来匹配节点,而不是 xsl:for-each

这是完整的XSLT

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
   <xsl:output method="text"/>

   <xsl:template match="/">
      <xsl:apply-templates select="local/message"/>
   </xsl:template>

   <xsl:template match="message">
      <xsl:value-of select="block4/tag[name = '72'][1]/value"/>
      <xsl:apply-templates select="block4/tag[name = '72'][position() &gt; 1]"/>
   </xsl:template>

   <xsl:template match="tag">
      <xsl:text>,</xsl:text>
      <xsl:value-of select="value"/>
   </xsl:template>
</xsl:stylesheet>

当应用于给定的输入XML时,输出如下:

ALW103111102000001,ipubby