我在这里解决了与该主题相关的几乎所有问题。但未能得到合适的解决方案。
我的问题如下:
我创建了一个简单的程序来解码一个我有 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,如果要解码的文档中的根元素是 items
,则应实例化此类,您还可以指定不同的名称 @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,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11152046/