您的位置:首页 > 编程语言 > Java开发

java操作xml的一个小例子

2016-02-25 20:04 525 查看
最近两天公司事比较多,这两天自己主要跟xml打交道,今天更一下用java操作xml的一个小例子。

原来自己操作xml一直用这个包:xstream-1.4.2.jar。然后用注解的方式,很方便,自己只要定义好bean的层次结构就可以了,第三方包会自动生成和解析xml。

但是今天发现,这个包有两个问题: 一个是比较复杂(我是菜鸟,求别喷,我真的觉得他挺复杂的。。)。比如说你要想处理既有属性又有值的xml就比较麻烦。(@XStreamConverter注解这种方法报这个错:com.thoughtworks.xstream.InitializationException)。搜了一下说是包冲突了。。

xstream最大的问题个人觉得是需要的类太多了。。。 可能是我们公司的xml格式不太规范。。。 不过这是历史遗留问题,我个人是没办法的。 比如这么一个xml:

<a>
<b>
<c>
<d>
xxx
</d></c></b></a>


如果用xstream的话,就要声明4个类(对他不熟,如果谁知道可以一个类搞定请指点),而用dom4j的话就一句:e.addElement("a").addElement("b").addElement("c").addElement("d").setText("xxx");

本文就用dom4j实现一个简单的bean到xml,和xml到bean的互换。

首先,是bean:

class Bean{
private String name;
private String nameParam;
private String age;
private String ageParam;
public Bean(String xml){
//这里是构造方法,通过xml转换成bean
}
public String toXML(){
//这里是bean转换成xml的方法
}

}


xml为:

<Student>
<name nameP="这是name的属性">张三</name>
<age ageP="这是年龄的属性">12</age>
</Student>


xml转换成bean的方法为:

{
//获取Document 对象
Document document = DocumentHelper.parseText(xml);
//获取根节点(就是student节点)
Element el = document.getRootElement();
//获取根节点下的节点:
Element name = el.element("name");
this.name = name.getText();
this.nameParam = name.attributeValue("nameP");
Element age= el.element("age");
this.age = age.getText();
this.ageParam = age.attributeValue("ageP");

}


toXML方法:

// 获取Document对象
Document doc = DocumentHelper.createDocument();
// 创建根节点:
Element rootEle = doc.addElement("Student");
// 创建子节点:
Element name = rootEle.addElement("name");
name.addAttribute("nameP", this.nameParam);
name.setText(this.name);
Element age = rootEle.addElement("age");
age.addAttribute("ageP", this.ageParam);
age.setText(this.age);
return doc.asXML();


测试代码:

public void Test(){
String xml = "<Student><name nameP=\"这是name的属性\">张三</name><age ageP=\"这是年龄的属性\">12</age></Student>";
Bean b = new Bean(xml);
System.out.println("name:\t"+b.getName()+"\tnamePra:\t"+b.getNameParam());
System.out.println("age:\t"+b.getAge()+"\tagePra:\t"+b.getAgeParam());
System.out.println("再生成xml:");
System.out.println(b.toXML());

}


结果:

name:    张三    namePra:    这是name的属性
age:    12    agePra:    这是年龄的属性
再生成xml:
<?xml version="1.0" encoding="UTF-8"?>
<Student><name nameP="这是name的属性">张三</name><age ageP="这是年龄的属性">12</age></Student>


个人小结:

首先,dom4j和XStream都是非常优秀的处理xml的第三方包。他们各有各的长处。

XStream的优点在于可以用配置代替代码。xml不用自己拼,这样犯错的几率就小一些,(而且不用写那么长的拼xml的语句)但是灵活性可能就会牺牲掉。

dom4j的优点在于简单,特别简单而且灵活。xml都是自己拼,而且解析也是自己挨个节点解析。用起来特别简单,但是真的是自己拼所有的xml。。 拼起来比较麻烦而且容易出错。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: