2012-02-08 95 views
3

我从另一个XML文件生成XML文件时遇到问题。 我的使用情况是这样的:Java - 从另一个XML + XSD生成XML

  1. 我有以下格式的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> 
    

是的,我知道这是相当混乱,但是这是我得到了它的方式。

  1. 我也有一个XSD架构,我使用JAXB生成相应的Java类(这工作正常)。

我现在需要的是建立从原来的另一个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,但我没有任何经验,它...

谢谢!

+1

XSD在这里如何相关?我看到将xml从1格式转换为另一种... XSLT作业 – 2012-02-08 15:35:26

+0

我们使用JAXB从XSD生成本示例中的第一个XML。 – Alex 2012-02-09 09:55:09

回答

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> 
+0

很好的答案,谢谢! 它就像一个魅力:) 我有一些问题的更多细节,但通过适应你提供的转换我设法有一个工作的解决方案,我的问题。 – Alex 2012-02-09 09:50:47

+0

@亚历克斯:不客气。 – 2012-02-09 13:01:00

+0

真棒逻辑..! :D竖起大拇指! :) – 2012-02-10 06:28:30