将xml表示为java类

时间:2012-06-26 18:36:40

标签: java xml

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

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

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

5 个答案:

答案 0 :(得分: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);
    }

}

<强> input.xml中/输出

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

答案 1 :(得分:3)

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

答案 2 :(得分:2)

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

http://www.castor.org/

答案 3 :(得分:1)

查看XStream

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

答案 4 :(得分:1)

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