如何使用xsl样式表管理xml中的重复标记

时间:2011-05-12 10:29:12

标签: xml xslt

在每个身体我都面临一个小问题...... 如果假设我已经收到xml的文件格式,那么块下面会有一些块标签将会出现一些块标签将不再重复,而在某些块中标签将重复 例如:  *

           <block3>
        <tag>
            <name>113</name>
            <value>FINANCIAL</value>
        </tag>

    </block3>
             <block4>

        <tag>
            <name>32A</name>
            <value>051028EUR9000,71</value>
        </tag>
        <tag>
            <name>32A</name>
            <value>051028EUR7000,71</value>
        </tag>
        <tag>
            <name>33B</name>
            <value>EUR9000,71</value>
        </tag>
        <tag>
            <name>33B</name>
            <value>EUR7000,71</value>
        </tag>
                     <tag>
            <name>71A</name>
            <value>OUR</value>
        </tag>
    </block4>
                   <xsl:for-each select ="block3/tag[name = '113']">
            <xsl:value-of select="value"/>
        </xsl:for-each>,
                   <xsl:for-each select ="block4/tag[name = '32A']">
  <xsl:value-of select="(translate(substring(value,10),',','.'))"/>,<xsl:text/>
        </xsl:for-each>
        <xsl:for-each select ="block4/tag[name = '33B']">
  <xsl:value-of select="(translate(substring(value,1),',','.'))"/>,<xsl:text/>
        </xsl:for-each>

*

我已经准备好了像这样的xsl样式表

输出:

如果没有标签可重复性意味着

FINANCIAL,9000.71,EUR9000.71

但是这里的xml标签在块内重复,所以我希望得到像

这样的结果

FINANCIAL,9000.71,EUR9000.71

FINANCIAL,7000.71,EUR7000.71

1 个答案:

答案 0 :(得分:0)

如果我理解正确,您正在寻找从所有<block>代码输出相同数据的方法吗?

您是否能够更改XML结构?如果它不是block3和block4,它会有所帮助,但只有多个标签。然后你可以做这样的事情:

<xsl:template match="tag">
    <xsl:value-of select="name"/>
    <xsl:value-of select="value"/>
</xsl:template>

此模板将匹配所有<tag>代码。然后,您只需在块/标签上应用模板。

<xsl:apply-templates select="block/tag"/>

这一行将对每个作为块标记的子标记的标记执行。

但是如果你不能改变XML的结构,只需保留模板并执行:

`<xsl:apply-templates select="block3/tag"/>
<xsl:apply-templates select="block4/tag"/>`
每个块的

等。

在我看来(来自我所教授的)使用apply-templates(虽然作为初学者比每个人更难理解)比在XSL中使用循环要好得多,因为它是基于模板的语言。

这有帮助吗?你的问题不是很清楚。