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



如果假设相同的标签将被重复,但标签值将不同,因为我需要使用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

看起来您要求的是要将所有标签元素与名称为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

相关内容

  • 没有找到相关文章

最新更新