java – 使用JAXB解组XML

我在这里经历了与此主题相关的几乎所有问题.但是无法得到适当的解决方案.

我的问题如下:

我创建了一个简单的程序来解组我有一个xsd的xml文件.我能够成功地做到这一点.但是,如果我在没有xsd的情况下获得xml,如果xml看起来像这样,我怎么能从中得到我的属性:

<items>
  <item>
    <code>12000</code>
    <name>Samsung  620</name>
    <price>9999</price>
  </item>
  <item>
    <code>15000</code>
    <name>NOKIA</name>
    <price>19999</price>
  </item>
  <item>
    <code>18000</code>
    <name>HTC 620</name>
    <price>29999</price>
  </item>
</items> 

在这里,我没有xsd来生成我的类.我该怎么办?请帮助我.

谢谢

最佳答案
下面是一种可以使用JAXB (JSR-222)实现映射用例的方法:

项目

我们将使用以下类作为根对象,并使用@XmlRootElement对其进行注释. @XmlRootElement注释告诉JAXB如果要解组的文档中的根元素是项目,则应该实例化该类,还可以指定不同的名称@XmlRootElement(name =“foo”).

package forum11152046;

import java.util.List;
import javax.xml.bind.annotation.*;

@XmlRootElement
public class Items {

    private List<Item> items;

    @XmlElement(name="item")
    public List<Item> getItems() {
        return items;
    }

    public void setItems(List<Item> items) {
        this.items = items;
    }

}

项目

在这个例子中,我创建了一个类,其中所有属性名称都直接对应于XML文档中的名称.这意味着没有任何需要添加的注释.如果需要覆盖默认名称,可以使用注释(如@XmlElement)来执行此操作.我使用@XmlElement批注在items属性的Items类中执行此操作.

package forum11152046;

public class Item {

    private int code;
    private String name;
    private int price;

    public int getCode() {
        return code;
    }

    public void setCode(int code) {
        this.code = code;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getPrice() {
        return price;
    }

    public void setPrice(int price) {
        this.price = price;
    }

}

演示

package forum11152046;

import java.io.File;
import javax.xml.bind.*;

public class Demo {

    public static void main(String[] args) throws Exception {
        JAXBContext jc = JAXBContext.newInstance(Items.class);

        Unmarshaller unmarshaller = jc.createUnmarshaller();
        File xml = new File("src/forum11152046/input.xml");
        Items items = (Items) unmarshaller.unmarshal(xml);

        Marshaller marshaller = jc.createMarshaller();
        marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
        marshaller.marshal(items, System.out);
    }

}

input.xml中/输出

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<items>
    <item>
        <code>12000</code>
        <name>Samsung  620</name>
        <price>9999</price>
    </item>
    <item>
        <code>15000</code>
        <name>NOKIA</name>
        <price>19999</price>
    </item>
    <item>
        <code>18000</code>
        <name>HTC 620</name>
        <price>29999</price>
    </item>
</items>

转载注明原文:java – 使用JAXB解组XML - 代码日志