我目前使用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的所有元素设置字段的所有值。我该怎么做?有什么想法吗?
提前致谢。
答案 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几乎相同的实现