java操作xml的一个小例子
最近两天公司事比较多,这两天自己主要跟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。。 拼起来比较麻烦而且容易出错。
java操作xml的一个小例子的更多相关文章
- java连接mysql的一个小例子
想要用java 连接数据库,需要在classpath中加上jdbc的jar包路径 在eclipse中,Project的properties里面的java build path里面添加引用 连接成功的一 ...
- 关于java赋值运算的一个小例子
直接贴代码,这个也是做题目中遇见的,觉得很好奇,查了一波,然后自己编写代码看了一下,果真如此,哈哈哈...... public class 关于Boolean的赋值运算 { public static ...
- Java操作XML的JAXB工具
在java中操作XML的工作中中,比较方便的工具是JAXB(Java Architecture for XML Binding). 利用这个工具很方便生成XML的tag和Java类的对应关系.参照网上 ...
- JDBC数据源(DataSource)数据源技术是Java操作数据库的一个很关键技术,流行的持久化框架都离不开数据源的应用。
JDBC数据源(DataSource)的简单实现 数据源技术是Java操作数据库的一个很关键技术,流行的持久化框架都离不开数据源的应用. 2.数据源提供了一种简单获取数据库连接的方式,并能在内部通 ...
- MVVM模式的一个小例子
使用SilverLight.WPF也有很长时间了,但是知道Binding.Command的基本用法,对于原理性的东西,一直没有深究.如果让我自己建一个MVVM模式的项目,感觉还是无从下手,最近写了一个 ...
- 使用Trinity拼接以及分析差异表达一个小例子
使用Trinity拼接以及分析差异表达一个小例子 2017-06-12 09:42:47 293 0 0 Trinity 将测序数据分为许多独立的de Brujin grap ...
- Spring和Hibernate结合的一个小例子
1.新建一个SpringHibernate的maven项目 2.pom文件的依赖为 <dependency> <groupId>junit</groupId> &l ...
- Hibernate入门1 - Hibernate概述及第一个小例子
一.什么是ORM? ORM,即Object Relational Mapping.我们知道,利用面向对象的思想编写的数据库应用程序最终都是把对象信息保存在关系型数据库中,于是需要编写与底层数据库相关的 ...
- Java操作xml文件
Bbsxml.java public class Bbsxml { private String imgsrc; private String title; private String url; p ...
随机推荐
- Nutch搜索引擎系列
下面是Nutch搜索系列目录,希望对研究Nutch的同学有所帮助. 目录安排: 1)Nutch搜索引擎(第1期)_ Nutch简介及安装[下载] 2)Nutch搜索引擎(第2期)_ Solr简介及安装 ...
- MVVM知识库总结
1.关于MVVM概念的理解和实际运用中的解析: http://www.cnblogs.com/hielvis/archive/2011/03/22/1991959.html http://msdn.m ...
- Parallel.ForEach , ThreadPool.QueueUserWorkItem
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.T ...
- Codeforces Round #335 (Div. 2) C. Sorting Railway Cars 动态规划
C. Sorting Railway Cars Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://www.codeforces.com/conte ...
- Codeforces Round #310 (Div. 2) A. Case of the Zeros and Ones 水题
A. Case of the Zeros and Ones Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/con ...
- accept函数
accept()函数 系统调用 accept() 会有点古怪的地方的! 你能够想象发生 这种事情:有人从非常远的地方通过一个你在侦听 (listen()) 的port连接 (connect()) 到你 ...
- 看来是要改用Gecko的节奏,放弃Awesomium吧
Gecko的对象模型很像微软自带的WebBrowser,Awesomium实在太难啃.
- HTML5 API——无刷新更新地址 history.pushState/replaceState 方法
尽 管是上面讲到的<JavaScript高级程序设计>(第二版)中提到,BOM中的location.path/query…… (window.location)在通过JavaScript更 ...
- Xcode和IOS模拟器
Xcode和IOS模拟器 目录 概述 Xcode常用操作 学会用Instrument IOS模拟器 概述 Xcode常用操作 整体缩进或者缩退 command+“[” .command+“]” 在同一 ...
- h5-3
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...