簡體   English   中英

如何從XML文件創建對象圖?

[英]How to create object graph from an XML-file?

我有一個XML文件。 可能是這樣的:

<person>
  <name>
    <firstname>Joni</firstname>
    <lastname>Smith</lastname>
  </name>
  <born year="1983" day="31" month="01">Finland</born>
  ... lots of elements ...
</person>

我的目標是創建類Person。 我如何“自動”做到這一點? 我想我已經使用了一些Maven Castor插件來輕松地從XML文件創建一個非常復雜的對象圖。 但是,我不記得那個插件是什么,確實不記得我是如何使用它的。 我也很高興了解您可能知道的其他(可能更好)的工具。

我同意使用JAXB。

從XML模式開始(從XML模式生成類)

您可以使用JAXB從XML Schema生成Java源代碼。 以下是使用EclipseLink JAXB(MOXy)進行操作的說明:

Metro SEXB XJC編譯器隨附Java SE 6,可以在JDK安裝的bin目錄中找到它:

C:\Program Files\Java\jdk1.6.0_20\bin>xjc -d outputDir mySchema.xsd

Eclipse中的Dali插件也具有此支持,請參見JAXB類生成部分:

從對象開始

使用對象模型,您可能會發現MOXy JAXB中基於XPath的映射擴展很有用:

import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlRootElement;

import org.eclipse.persistence.oxm.annotations.XmlPath;

@XmlRootElement
@XmlAccessorType(XmlAccessType.FIELD)
public class Person {

    @XmlPath("name/firstname/text()")
    private String firstName;

    @XmlPath("name/lastname/text()")
    private String lastName;

    // ...
}

可以與以下演示代碼一起使用以處理XML:

import java.io.File;

import javax.xml.bind.JAXBContext;
import javax.xml.bind.Marshaller;
import javax.xml.bind.Unmarshaller;

public class Demo {

    public static void main(String[] args) throws Exception {
        JAXBContext jc = JAXBContext.newInstance(Person.class);

        Unmarshaller unmarshaller = jc.createUnmarshaller();
        Person person = (Person) unmarshaller.unmarshal(new File("input.xml"));

        Marshaller marshaller = jc.createMarshaller();
        marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
        marshaller.marshal(person, System.out);
    }
}

有關基於XPath的映射的更多信息,請參見:

對於“出生”元素,您可能會發現JAXB的XmlAdapter有幫助:

有幾個工具。 來自Apache Commons的Digester是其中之一。 相當簡單易用。

更新:這是與其他答案(xmlbeans,jaxb)中提到的其他工具的比較 總而言之,Digester是最薄的,易於將xml加載到對象中(例如,特別適合“內部”配置文件)。 其他工具更傾向於完整的xml對象映射(雙向),並且在涉及xml模式時特別有用。

看一下JAXB 有很多工具,請選擇最適合您需求的工具。

Apache XMLBeans是一種從XML生成類的好方法,並且支持許多其他工具無法很好地支持的高級XML功能(例如類型繼承)。 XMLBeans有一個命令行工具,用於生成一個jar,然后將其包含在項目中,該jar包含所有bean類以及用於創建和使用XML文檔的工廠。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM