1. 程式人生 > >Xml-物件互相轉換(獲取節點屬性)

Xml-物件互相轉換(獲取節點屬性)

最近用到了就寫了一個簡單例子,寫到這裡記錄分享。

這個類是轉換的工具類只有兩個方法,Xml轉Object,和Object轉Xml

import java.io.StringReader;

import java.io.StringWriter;
import javax.xml.bind.JAXBContext;
import javax.xml.bind.JAXBException;
import javax.xml.bind.Marshaller;
import javax.xml.bind.Unmarshaller;
import com.h3c.fwrj.dzkf.user.entity.Name;
import com.h3c.fwrj.dzkf.user.entity.User;

/**
 * Xml 檔案轉化Object,...
 *
 */
public class XmlFileUtils {
/**
* Xml字串轉Object
* @param xml
* @param clazz
* @return
*/
@SuppressWarnings("unchecked")
public static <T> T toObject(String xml, Class<T> clazz) {
try {
Unmarshaller unmarshaller = JAXBContext.newInstance(clazz).createUnmarshaller();
return (T) unmarshaller.unmarshal(new StringReader(xml));
} catch (JAXBException e) {
e.printStackTrace();
}
return null;
}
/**
* Object轉Xml字串
* @param t
* @return
* @throws JAXBException 
*/
public static <T> String toXml(T t) {
if (t == null) {
return "";
}
Marshaller marshaller;
try {
marshaller = JAXBContext.newInstance(t.getClass()).createMarshaller();
marshaller.setProperty(Marshaller.JAXB_ENCODING, "UTF-8");// 編碼格式
//marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);// 是否格式化生成的xml串
//marshaller.setProperty(Marshaller.JAXB_FRAGMENT, false);// 是否省略xml頭宣告資訊
StringWriter writer = new StringWriter();
marshaller.marshal(t, writer);
return writer.toString().trim();
} catch (JAXBException e) {
e.printStackTrace();
}
return "";
}

public static void main(String[] args) {
User user = new User(new Name("zs", "111"), "123456");
System.out.println(toXml(user));

//String xml = "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>"
//+ "<user><name value=\"111\">zs</name><password>123456</password></user>";
//User user = toObject(xml, User.class);
//System.out.println(user.toString());
}

}

這個類是User類,類包括兩個屬性name 和password。其中name節點中包含屬性value

import javax.xml.bind.annotation.XmlRootElement;

@XmlRootElement
public class User {
private Name name;
private String password;
public Name getName() {
return name;
}
public void setName(Name name) {
this.name = name;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public User() {
}

public User(Name name, String password) {
super();
this.name = name;
this.password = password;
}
@Override
public String toString() {
return "User [name=" + name + ", password=" + password + "]";
}
}

這個類是User中name節點的實體類。
import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlAttribute;
import javax.xml.bind.annotation.XmlRootElement;
import javax.xml.bind.annotation.XmlValue;

@XmlAccessorType(XmlAccessType.FIELD) 
@XmlRootElement(name = "name")
public class Name {
@XmlValue
private String name;
@XmlAttribute
private String value;
public String getValue() {
return value;
}
public void setValue(String value) {
this.value = value;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Name() {
}
public Name(String name, String value) {
super();
this.name = name;
this.value = value;
}
@Override
public String toString() {
return "Name [name=" + name + ", value=" + value + "]";
}

}