2012-02-08 166 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