可能有人问过这个问题。我是 xml 到 java 类转换的新手。我有一个这样的xml:
<Root>
<Book name="harel" price="5" />
<Book name="xml" price="9" />
</Root>
有没有办法为这样的结构动态生成java类?一个小的更正,我没有用于 xml 的 xsd
注意: 我是EclipseLink JAXB (MOXy)负责人,也是JAXB (JSR-222)专家组的成员。
有没有办法为这样的结构动态生成java类?
JAXB 实现提供了从 XML 模式生成 Java 模型的能力。从 Java SE 6 开始包含在 JDK 中的参考实现可在以下位置获得:
<JAVA_HOME>/bin/xjc
可以在此处找到从 XML 模式生成对象模型的示例:
一个小的更正,我没有用于 xml 的 xsd
如果您没有 XML 模式,您可以找到一个实用程序来从 XML 文档生成 XML 模式:
或者从代码开始。
从代码开始
您还可以从代码开始并注释您的模型以映射到现有的 XML 结构。
根
package forum11213872;
import java.util.List;
import javax.xml.bind.annotation.*;
@XmlRootElement(name="Root")
@XmlAccessorType(XmlAccessType.FIELD)
public class Root {
@XmlElement(name="Book")
private List<Book> books;
}
书
package forum11213872;
import javax.xml.bind.annotation.*;
@XmlAccessorType(XmlAccessType.FIELD)
public class Book {
@XmlAttribute
private String name;
@XmlAttribute
private int price;
}
演示
package forum11213872;
import java.io.File;
import javax.xml.bind.*;
public class Demo {
public static void main(String[] args) throws Exception {
JAXBContext jc = JAXBContext.newInstance(Root.class);
Unmarshaller unmarshaller = jc.createUnmarshaller();
File xml = new File("src/forum11213872/input.xml");
Root root = (Root) unmarshaller.unmarshal(xml);
Marshaller marshaller = jc.createMarshaller();
marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
marshaller.marshal(root, System.out);
}
}
输入.xml/输出
<Root>
<Book name="harel" price="5" />
<Book name="xml" price="9" />
</Root>
是的,请参阅 castor 框架 (http://www.castor.org/) 或 jaxb (http://www.oracle.com/technetwork/articles/javase/index-140168.html)
试试 Java Castor。您可以指定 xsd 并将其转换为对象。还有一个 Eclipse 插件。
看看XStream。
它在 XML 和 Java 之间以及 Java 和 XML 之间进行转换。