将XML实体映射到Java对象
我确定这是围绕XML到Java对象转换的许多重复问题之一。 但我开始这个线程,因为我找不到更简单或寻找更简单的解决方案。将XML实体映射到Java对象
我有一个xsd [Infact我正在设计它]和xml。 我想为每个映射
<tns:SummaryCart xmlns:tns="SummaryCart" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="SummaryCart.xsd">
<SummaryElement type="test">
<order>1</order>
<id>A</id>
<displayName>A</displayName>
<subElements>
<order>1</order>
<id>Preactivation</id>
<displayName>Preactivation</displayName>
</subElements>
<maxlines>1</maxlines>
</SummaryElement>
</tns:SummaryCart>
现在XML数据的Java bean自动映射我的Java类将
public class SummaryCart{
private List<SummaryElement> summaryElementList;
}
public class SummaryElement {
private int order;
private String id;
private String displayName;
private String property;
private List<SummaryElement> subElements;
private int maxlines;
private String type;
}
有没有简单的工具/框架,它可以自动映射从XML到Java bean的数据[必须支持属性/元素映射]。教程将会很好。
顺便说一句,我使用的是Spring框架,如果采用spring-oxm优势,那么它受到欢迎。
下面介绍如何使用JAXB (JSR-222)将对象映射到XML。一个实现包括在JDK/JRE开始与Java SE 6 JAXB由弹簧支撑(见8.5节:http://static.springsource.org/spring-ws/site/reference/html/oxm.html)
SummaryCart
import java.util.List;
import javax.xml.bind.annotation.*;
@XmlRootElement(name="SummaryCart", namespace="SummaryCart")
@XmlAccessorType(XmlAccessType.FIELD)
public class SummaryCart{
@XmlElement(name="SummaryElement")
private List<SummaryElement> summaryElementList;
}
SummaryElement
import java.util.List;
import javax.xml.bind.annotation.*;
@XmlAccessorType(XmlAccessType.FIELD)
public class SummaryElement {
private int order;
private String id;
private String displayName;
private String property;
private List<SummaryElement> subElements;
private int maxlines;
@XmlAttribute
private String type;
}
演示
import java.io.File;
import javax.xml.bind.*;
public class Demo {
public static void main(String[] args) throws Exception {
JAXBContext jc = JAXBContext.newInstance(SummaryCart.class);
Unmarshaller unmarshaller = jc.createUnmarshaller();
File xml = new File("src/forum15881876/input.xml");
SummaryCart sc = (SummaryCart) unmarshaller.unmarshal(xml);
Marshaller marshaller = jc.createMarshaller();
marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
marshaller.setProperty(Marshaller.JAXB_SCHEMA_LOCATION, "SummaryCart.xsd");
marshaller.marshal(sc, System.out);
}
}
的input.xml /输出
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<ns2:SummaryCart xmlns:ns2="SummaryCart" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="SummaryCart.xsd">
<SummaryElement type="test">
<order>1</order>
<id>A</id>
<displayName>A</displayName>
<subElements>
<order>1</order>
<id>Preactivation</id>
<displayName>Preactivation</displayName>
<maxlines>0</maxlines>
</subElements>
<maxlines>1</maxlines>
</SummaryElement>
</ns2:SummaryCart>
不是说,我们正在使用JDK 5.是的,遗产应用程序。我可以通过使用Maven包含任何特定库来实现它吗? – Reddy 2013-04-09 01:53:08
下面是一个pom.xml文件,它将EclipseLink MOXy作为JAXB impl(我是MOXy领导者):https://github.com/bdoughan/blog20110819/blob/master/pom.xml – 2013-04-09 01:58:19
基本上你想要unmarshal你的XML。以下是详细的教程,介绍如何使用JAXB xjc
命令至generate a Java class from XML Schema。一个maven xjc plugin也可以为您提供方便。
从Java类启动时,您也可以使用JAXB实现:http://*.com/a/15884122/383861 – 2013-04-08 16:20:57
注意到Blaise。我对OP的问题最初的理解是他想要毫无用处地生成Java文件,只用XSD作为他的出发点。重新读一遍,你是对的,似乎他只需要一种方法来自动映射它们。感谢您的不投票。:) – Jops 2013-04-08 16:30:41
使用JAXB与注解。 [这里](http://jaxb.java.net/tutorial/)是一个教程。 – 2013-04-08 14:39:53