2012-03-28 69 views
0

如何在java中解析XML。 我有如下一個XML:用JAVA解析XML,從一個Schema轉換爲其他

<?xml version="1.0" ?> 
<metabase> 
    <response status="SUCCESS"/> 
    <item> 
    <id>10147417040</id> 
    <description> 
     <title>What part of the constitiution states the goals?</title> 
     <language>English</language> 
    </description> 
    <pubDate>2012-03-27 07:25:33.0</pubDate> 
    </item> 
    <item> 
    <id>10147417018</id> 
    <description> 
     <title>What is the work envelope of a robot car?</title> 
     <language>English</language> 
    </description> 
    <pubDate>2012-03-27 07:25:33.0</pubDate> 
    </item> 
</metabase> 

我要分析此XML並將其轉換爲表格:

<?xml version="1.0" ?> 
<add> 
    <doc> 
    <field name="id">10147417040</field> 
    <field name="title">What part of the constitiution states the goals?</field> 
    <field name="language">English</field> 
    <field name="pubDate">2012-03-27 07:25:33.0</field> 
    </doc> 
    <doc> 
    <field name="id">10147417018</field> 
    <field name="title">What is the work envelope of a robot car?</field> 
    <field name="language">English</field> 
    <field name="pubDate">2012-03-27 07:25:33.0</field> 
    </doc> 
</add> 

請給一些Java代碼示例做這個任務。

感謝 Shariq

回答

1

做這種XML到XML轉換的最佳方法是使用XSLT。這裏是XSLT已經做了你需要的東西:

<xsl:stylesheet 
    version="1.0" 
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 

    <xsl:template match="text()"> 
    </xsl:template> 

    <xsl:template match="item"> 
    <doc> 
     <field name="id"> 
     <xsl:value-of select="id" /> 
     </field> 
     <field name="title"> 
     <xsl:value-of select="description/title" /> 
     </field> 
     <field name="language"> 
     <xsl:value-of select="description/language" /> 
     </field> 
     <field name="pubDate"> 
     <xsl:value-of select="pubDate" /> 
     </field> 
    </doc> 
    </xsl:template> 

    <xsl:template match="/"> 
    <add> 
     <xsl:apply-templates/> 
    </add> 
    </xsl:template> 

</xsl:stylesheet> 

我不熟悉Java,但我可以肯定的是,這裏是裝入一個XSLT,並將其應用到XML的簡單方法 - 例如參見http://www.devx.com/getHelpOn/10MinuteSolution/16635/1954