我們有一些包含許多元素的XML,其中一個包含以分號分隔的值。但是,我們希望每個值插入到新的子元素中。將分號分隔的值拆分爲單獨的子元素(XML)
例如。目前,XML是這樣的:<value>one;two;three</value>
但我需要:
<value>
<item>one</item>
<item>two</item>
<item>three</item>
</value>
我想象某種變換需要的?
我們有一些包含許多元素的XML,其中一個包含以分號分隔的值。但是,我們希望每個值插入到新的子元素中。將分號分隔的值拆分爲單獨的子元素(XML)
例如。目前,XML是這樣的:<value>one;two;three</value>
但我需要:
<value>
<item>one</item>
<item>two</item>
<item>three</item>
</value>
我想象某種變換需要的?
類似的東西?
<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>
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就是要走的路。