Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/320.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何从XML文件创建对象图?_Java_Xml_Object - Fatal编程技术网

Java 如何从XML文件创建对象图?

Java 如何从XML文件创建对象图?,java,xml,object,Java,Xml,Object,我有一个XML文件。可能是这样的: <person> <name> <firstname>Joni</firstname> <lastname>Smith</lastname> </name> <born year="1983" day="31" month="01">Finland</born> ... lots of elements ... </

我有一个XML文件。可能是这样的:

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

乔尼
史密斯
芬兰
... 很多元素。。。
我的目标是创造一个班上的人。我如何“自动”完成它?我想我已经使用了一些maven castor插件从XML文件中创建了一个非常复杂的对象图,而没有做很多工作。然而,我不记得那个插件是什么,也确实不记得我到底是如何使用它的。我也很高兴了解到您可能知道的其他(可能更好)工具。

有几种工具,来自ApacheCommons,是其中之一。使用起来很简单


更新:这里有一个关于其他答案(xmlbeans、jaxb)中提到的其他工具的例子。总之,Digester是最精简的,只适合将xml加载到对象中(特别适合于“内部”配置文件)。其他工具更倾向于完整的xml对象映射(两个方向),在涉及xml模式时特别有用。

深入研究。有许多工具,请选择最适合您需要的工具。

Apache是从XML生成类的一种非常好的方法,并且支持许多其他工具不支持的高级XML功能(例如类型继承)。XMLBeans有一个命令行工具,用于生成jar,然后将其包含在项目中,该jar包含所有bean类以及用于创建和使用XML文档的工厂。

我同意使用JAXB

从XML模式开始(从XML模式生成类)

您可以使用JAXB从XML模式生成Java源代码。以下是使用EclipseLink JAXB(MOXy)执行此操作的说明:

Java SE 6附带Metro JAXB XJC编译器,可在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的映射的更多信息,请参阅:

对于“born”元素,您可能会发现JAXB的XmlAdapter很有用:


很抱歉,我的问题可能不太清楚。我真正想要的是用类定义为POJO生成Java源代码。但无论如何,答案都很好。我尽量接受正确的答案,我已经更新了答案,更加关注从XML模式生成源代码。我希望这有帮助:您可以考虑从模式(XSD)开始