我遇到从另一个XML文件生成XML文件的问题。 我的用例是:
我有一个XML文件,格式如下:
<tag1>
<tag2>value2</tag2>
<tag3>value3_1, value3_2, value3_3</tag3>
<tag4>
<tag4_1>value4_1</tag4_1>
<tag4_2>value4_2</tag4_2>
</tag4>
</tag1>
是的,我知道这很乱,但这就是我得到它的方式。
我现在需要的是一种从原始XML文件创建另一个XML文件的方法,具有以下格式:
<element name="tag1.tag2">
<value>value2</value>
</element>
<element name="tag1.tag3">
<value>value3_1, value3_2, value3_3</value>
</element>
<element name="tag1.tag4.tag4_1">
<value>value4_1</value>
</element>
<element name="tag1.tag4.tag4_2">
<value>value4_2</value>
</element>
对于我应该使用哪些框架/库而不进行自己的解析/创建机制,您有什么建议吗?
我正在考虑使用XSLT,但我对它没有任何经验......
谢谢!
答案 0 :(得分:5)
此转化:
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output omit-xml-declaration="yes" indent="yes"/>
<xsl:strip-space elements="*"/>
<xsl:template match="*[not(*)]">
<xsl:variable name="vName">
<xsl:for-each select="ancestor-or-self::*">
<xsl:if test="not(position() = 1)">.</xsl:if>
<xsl:value-of select="name()"/>
</xsl:for-each>
</xsl:variable>
<element name="{$vName}">
<value><xsl:value-of select="."/></value>
</element>
</xsl:template>
</xsl:stylesheet>
应用于提供的XML文档:
<tag1>
<tag2>value2</tag2>
<tag3>value3_1, value3_2, value3_3</tag3>
<tag4>
<tag4_1>value4_1</tag4_1>
<tag4_2>value4_2</tag4_2>
</tag4>
</tag1>
生成想要的正确结果:
<element name="tag1.tag2">
<value>value2</value>
</element>
<element name="tag1.tag3">
<value>value3_1, value3_2, value3_3</value>
</element>
<element name="tag1.tag4.tag4_1">
<value>value4_1</value>
</element>
<element name="tag1.tag4.tag4_2">
<value>value4_2</value>
</element>