如果假设相同的标签会被重复,但是对于那个标签值会有所不同,因为我需要使用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
答案 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() > 1]"/>
</xsl:template>
<xsl:template match="tag">
<xsl:text>,</xsl:text>
<xsl:value-of select="value"/>
</xsl:template>
</xsl:stylesheet>
当应用于给定的输入XML时,输出如下:
ALW103111102000001,ipubby