简单的实现方法
1:实体类 Entity
package test;
public class Entity {
private String id;
private String name;
public Entity() {
super();
// TODO Auto-generated constructor stub
}
public Entity(String id, String name) {
super();
this.id = id;
this.name = name;
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
2:xml文件 test.xml
<?xml version="1.0" encoding="utf-8"?>
<Entity>
<Id>001</Id>
<Name>张三</Name>
</Entity>
3:转换 XML2Entity
package test;
import java.io.StringReader;
import java.lang.reflect.Method;
import java.util.List;
import org.jdom.Document;
import org.jdom.Element;
import org.jdom.input.SAXBuilder;
import org.xml.sax.InputSource;
public class XML2Entity {
@SuppressWarnings("unchecked")
public void xmlElements(String xmlDoc) throws Exception {
Entity v = new Entity();
/* 从本地读取xml文件
*SAXBuilder sb = new SAXBuilder();
*Document doc = sb.build("bin/test.xml");//构造文档对象
*/
/* 直接传递String字符串*/
StringReader read = new StringReader(xmlDoc);
InputSource source = new InputSource(read);
SAXBuilder sb = new SAXBuilder();
Document doc = sb.build(source);
Element root = doc.getRootElement();
List<Element> list = root.getChildren();
for (int i = 0; i < list.size(); i++) {
Element element = list.get(i);
String name = element.getName();
String value = element.getText();
String methodName = "set" + name;
Method m = v.getClass().getMethod(methodName, new Class[] { String.class });
m.invoke(v, new Object[] { value });
}
}
public static void main(String[] args) throws Exception {
XML2Entity oo = new XML2Entity();
String vehicleXml = "<?xml version=\"1.0\" encoding=\"utf-8\"?>"
+ "<Vehicle>"
+ "<Id>001</Id>"
+ "<Name>张三</Name>"
+ "</Vehicle>";
oo.xmlElements(vehicleXml);
}
}
JAXB 实现java对象与xml之间互相转换
利用Marshaller和unMarshaller可在java的object对象和xml之间实现转换
Entity类
import javax.xml.bind.annotation.XmlRootElement;
@XmlRootElement
public class Entity {
private String id;
private String name;
public Entity() {
super();
// TODO Auto-generated constructor stub
}
public Entity(String id, String name) {
super();
this.id = id;
this.name = name;
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
JAXBDemo类
import java.io.File;
import javax.xml.bind.JAXBContext;
import javax.xml.bind.JAXBException;
import javax.xml.bind.Marshaller;
import javax.xml.bind.Unmarshaller;
public class JAXBDemo {
public static void main(String args[]) {
Entity2XML(); //实体类转xml
XML2Entity(); //xml转实体类
}
public static void Entity2XML() {
// 创建xml文档对象,将其保存到E盘根目录
File xmlFile = new File("D:\\test.xml");
// 声明JAXBContext 上下文对象
JAXBContext context;
try {
// 通过指定映射的类创建上下文
context = JAXBContext.newInstance(Entity.class);
// 通过上下文创建java转换xml对象
Marshaller m = context.createMarshaller();
Entity e = new Entity();
e.setId("001");
e.setName("张三");
m.marshal(e, xmlFile);
} catch (JAXBException e) {
e.printStackTrace();
}
}
public static void XML2Entity(){
//创建xml文档对象,将其保存到E盘根目录
File xmlFile =new File("D:\\test.xml");
//声明JAXBContext 上下文对象
JAXBContext context;
try{
//通过指定映射的类创建上下文
context=JAXBContext.newInstance(Entity.class);
//通过上下文创建java转换xml对象
Unmarshaller u=context.createUnmarshaller();
Entity e=(Entity)u.unmarshal(xmlFile);
System.out.println(e.getId() + ": " + e.getName());
}catch(JAXBException e){
e.printStackTrace();
}
}
}