如何为XML解析创建泛型?

时间:2014-08-15 04:43:50

标签: java xml xml-parsing jsoup dom4j

我目前使用jsoup,有时使用dom4j来解析xml的字符串。 以下是使用jsoup进行操作的示例。

Document doc = Jsoup.parse(xml);
Elements root = doc.select("person");
for(Elements elem : elements){
Person person = new Person();
person.setFirstname(elem.select("firstName").text());
person.setLastname(elem.select("lastName").text());
person.setAddress(elem.select("address").text());
//other setters here
}

每次我必须解析xml我必须得到所有元素并设置为POJO的setter。现在我想创建一个泛型,我只需要传递一个xml字符串和一个POJO类,然后它将根据xml的所有元素设置字段的所有值。我该怎么做?有什么想法吗?

提前致谢。

1 个答案:

答案 0 :(得分:1)

JAXB是要走的路。

注意: 它包含在JAVA 1.6及更高版本中

将XML标记添加到POJO(XmlRootElement对于简单对象就足够了,XmlElement也可以添加到变量中)

import javax.xml.bind.annotation.XmlRootElement;

@XmlRootElement(name = "Person")
public class Person {

    private String firstName;

    private String lastName;

    private String address;

    public final String getFirstName() {
        return firstName;
    }

    public final void setFirstName(String firstName) {
        this.firstName = firstName;
    }

    public final String getLastName() {
        return lastName;
    }

    public final void setLastName(String lastName) {
        this.lastName = lastName;
    }

    public final String getAddress() {
        return address;
    }

    public final void setAddress(String address) {
        this.address = address;
    }

    @Override
    public String toString() {
        return "FirstName: " + firstName + " LastName: " + lastName + " Address: " + address;
    }

}

使用Unmarshaller从xml文件创建POJO。

    File file = new File("<Path to Xml file>");
    JAXBContext context = JAXBContext.newInstance(Person.class);
    Unmarshaller unmarsheller = context.createUnmarshaller();
    Person person = (Person) unmarsheller.unmarshal(file);
    System.out.println(person);

您也可以使用Marshaller从POJO创建XML。

有更多可用的例子here来创建复杂对象,添加列表,数组。

注意:它在Android平台上不可用,如果您想在Android上使用它,您可以使用SimpleXML几乎相同的实现