我们有一些包含许多元素的XML,其中一个元素包含以分号分隔的值。但是,我们希望将每个值插入到新的子元素中。
例如。目前,XML看起来像这样:<value>one;two;three</value>
但我需要:
<value>
<item>one</item>
<item>two</item>
<item>three</item>
</value>
我想想要进行某种转换?
答案 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就是你的选择。