2013-11-28 45 views
0

我們有一些包含許多元素的XML,其中一個包含以分號分隔的值。但是,我們希望每個值插入到新的子元素中。將分號分隔的值拆分爲單獨的子元素(XML)

例如。目前,XML是這樣的:<value>one;two;three</value>

但我需要:

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

我想象某種變換需要的?

回答

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> 
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就是要走的路。

相關問題