将分号分隔值拆分为单个子元素(XML)

时间:2013-11-28 11:58:07

标签: xml xslt

我们有一些包含许多元素的XML,其中一个元素包含以分号分隔的值。但是,我们希望将每个值插入到新的子元素中。

例如。目前,XML看起来像这样:<value>one;two;three</value>

但我需要:

<value>
<item>one</item>
<item>two</item>
<item>three</item>
</value>

我想想要进行某种转换?

2 个答案:

答案 0 :(得分:1)

那样的东西?

<xsl:template name="extract-item">
  <xsl:param name="items" />
  <xsl:if test="$items != ''">
    <item>
      <xsl:value-of select="substring-before($items, ';')" />
    </item>
    <xsl:call-template name="extract-item">
      <xsl:with-param name="items" select="substring-after($items, ';')" />
    </xsl:call-template>
  </xsl:if>
</xsl:template>

<xsl:template match="value">
  <value>
    <xsl:call-template name="extract-item">
      <xsl:with-param name="items" select="concat(., ';')" />
    </xsl:call-template>
  </value>
</xsl:template>

答案 1 :(得分:0)

Erlock的答案是XSLT中的正确方法。

那就是说,如果您需要做的唯一事情是将所有以分号分隔的项目转换为元素,您也可以使用* nix命令执行此操作,如:

sed -e 's/<value>/<value><item>/g' 
    -e 's/<\value>/<\/item><\/value>/g'
    -e 's/;/<\/item><item>/g' myfile.xml

这假设没有其他分号浮动,并且不需要担心XML注释,PI或CDATA部分。如果你不确定那么简单,XSLT就是你的选择。