我有一个从另一个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>
Run Code Online (Sandbox Code Playgroud)是的,我知道它很乱,但这就是我得到它的方式.
我现在需要的是一种从原始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>
Run Code Online (Sandbox Code Playgroud)
如果没有自己的解析/创建机制,您对我应该使用哪些框架/库有任何建议吗?
我在考虑使用XSLT,但我没有任何经验...
谢谢!
这种转变:
<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>
Run Code Online (Sandbox Code Playgroud)
当应用于提供的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>
Run Code Online (Sandbox Code Playgroud)
产生想要的,正确的结果:
<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>
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
1832 次 |
最近记录: |