2010-10-07 67 views
2

我有一个XML文件。它可能是这样的:如何从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文件中创建一个相当复杂的对象图,而没有费力。但是,我不记得那个插件是什么,并且确实不记得我是如何使用它的。我也很高兴了解你可能知道的其他(可能更好的)工具。

+0

对不起,我的问题可能不完全清楚。我真正想要的是用类定义为POJO生成Java源代码。但无论如何,答案都很好。我尽我所能接受正确的一个。 – Joni 2010-10-08 10:52:50

+0

我已经更新了我的答案,重点关注从XML模式生成源代码。我希望这可以帮助:http://stackoverflow.com/questions/3884814/how-to-create-object-graph-from-an-xml-file/3885623#3885623 – 2010-10-08 14:25:31

+1

你可能会考虑从模式(XSD)开始, – McDowell 2010-10-08 14:30:48

回答

3

我同意使用JAXB。

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

您可以使用JAXB从XML生成模式的Java源代码。下面是使用的EclipseLink JAXB这样做(莫西)的说明:

的Java SE 6自带的地铁JAXB XJC编译器就可以在你的JDK安装的bin目录中找到:

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

大理插件在Eclipse中也有这样的支持,看到JAXB类生成部:

从对象

随着你的对象模型开始,你可能会发现基于XPath映射扩展在莫西JAXB有用:

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有所帮助:

1

有几个工具。来自Apache Commons的Digester就是其中之一。非常简单的使用。

更新:这是comparison与其他答案中提到的其他工具(xmlbeans,jaxb)。总之,Digester是最简单的,只需将xml加载到对象(特别适用于“内部”配置文件)。其他工具更多地面向完整的xml对象映射(双向),并且在涉及xml模式时特别有用。

1

调查JAXB。有很多工具,选择最适合您需求的工具。

0

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