繁体   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