3

可能有人问过这个问题。我是 xml 到 java 类转换的新手。我有一个这样的xml:

<Root>
    <Book name="harel" price="5" />
    <Book name="xml" price="9" />
</Root>

有没有办法为这样的结构动态生成java类?一个小的更正,我没有用于 xml 的 xsd

4

5 回答 5

6

注意: 我是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>
于 2012-06-26T18:45:25.563 回答
3

是的,请参阅 castor 框架 (http://www.castor.org/) 或 jaxb (http://www.oracle.com/technetwork/articles/javase/index-140168.html)

于 2012-06-26T18:38:48.700 回答
2

试试 Java Castor。您可以指定 xsd 并将其转换为对象。还有一个 Eclipse 插件。

http://www.castor.org/

于 2012-06-26T18:39:27.607 回答
1

看看XStream

它在 XML 和 Java 之间以及 Java 和 XML 之间进行转换。

于 2012-06-26T18:40:35.097 回答
1

使用JAXB,它现在包含在 JavaSE 中,您可以使用 XJC 从 XSD 生成类。但是,如果您真正的意思是动态的,因为直到运行时才知道 XML 的结构,您将需要使用JDOM之类的东西。

于 2012-06-26T18:48:43.550 回答