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 + "]";
}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值