使用JAXB解组XML

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

我的问题如下:

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

  12000 Samsung 620 9999   15000 NOKIA 19999   18000 HTC 620 29999   

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

谢谢

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

项目

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

 package forum11152046; import java.util.List; import javax.xml.bind.annotation.*; @XmlRootElement public class Items { private List items; @XmlElement(name="item") public List getItems() { return items; } public void setItems(List 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中/输出

    12000 Samsung 620 9999   15000 NOKIA 19999   18000 HTC 620 29999   

如果你想坚持使用JAXB ,你可以自己编写一个XML Schema Document来validation这样的XML(它看起来很简单,但它只是一个实例,你需要事先找出这些文档中可能发生的变化)或者创建一个POJO使用与这些节点匹配的JAXB注释 。 我担心别无他法。 您仍然需要知道格式允许的内容。