使用XSL连接重复的标记

时间:2011-11-29 22:25:24

标签: xslt

我有一个格式奇怪的XML文档,其中包含一些重复的标记;但是我需要使用不支持重复标记的工具来处理这些数据。

因此,我需要一种方法来连接重复标签中的数据。

我的初始文件如下:

<root>
    <irrelevantTag1>irrelevantData1</irrelevantTag1>
    <irrelevantTag2>irrelevantData2</irrelevantTag2>
    <irrelevantTag3>
        <irrelevantTag4>irrelevantData4</irrelevantTag4>
        <keyword>one</keyword>
        <keyword>two</keyword>
    </irrelevantTag3>
    <irrelevantTag5>irrelevantData5</irrelevantTag5>
</root>

我需要一个样式表来将值与两个“keyword”标签连接起来,并生成一个关键字标签,如下面的输出所示:

<root>
    <irrelevantTag1>irrelevantData1</irrelevantTag1>
    <irrelevantTag2>irrelevantData2</irrelevantTag2>
    <irrelevantTag3>
        <irrelevantTag4>irrelevantData4</irrelevantTag4>
        <keyword>one,two</keyword>
    </irrelevantTag3>
    <irrelevantTag5>irrelevantData5</irrelevantTag5>
</root>

1 个答案:

答案 0 :(得分:4)

这两个模板应该可以解决问题:

<xsl:template match="keyword[1]">
   <keyword>
      <xsl:for-each select="../keyword">
         <xsl:if test=". != ../keyword[1]">,</xsl:if>
         <xsl:value-of select="."/>
      </xsl:for-each>
   </keyword>
</xsl:template>
<xsl:template match="keyword"/>

对父元素的匹配使用apply-templates,或者只是将它们插入到身份转换中。