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 ...
随机推荐
- spring 切面 前置后置通知 环绕通知demo
环绕通知: <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http:// ...
- HTML第三天学习笔记
昨天学的超链接,今天深入学习了下,发现了更多的知识点,而且关于初始新建网页时,由于是初学者,所以还是纯手写代码~ <html> <head> <title>超链接& ...
- oracle存储过程实例
oracle存储过程实例 分类: 数据(仓)库及处理 2010-05-03 17:15 1055人阅读 评论(2)收藏 举报 认识存储过程和函数 存储过程和函数也是一种PL/SQL块,是存入数据库的P ...
- 好看的UI界面
- JSAPI用户手册
本文档主要涵盖如何嵌入SpiderMonkey javascript引擎到你自己的c++程序中. JavaScript在浏览器端已经被广泛使用了.但是,Mozilla的javascript引擎可以被嵌 ...
- oracle 有用站点
使用oradebug修改数据库scn – 提供专业ORACLE技术咨询和支持@Phone13429648788 - 惜分飞 Solaris上使用DTrace进行动态跟踪 老熊的三分地-Oracle及数 ...
- stm32出现错误“identifier file is undefined”
为什么记录这个问题,说来很简单,这已经是第二次犯这个小错误了. 出现了错误“identifier file is undefined”的解决方法;option->general options- ...
- qregularexpression和qregexp的区别
QRegularExpression 是Qt 5.0才引进的,相对于QRegExp,QRegularExpression class修复了很多bug,提高了效率,提供了对Perl的RegEx几乎全面兼 ...
- Golang学习 - bytes 包
------------------------------------------------------------ 对于传入 []byte 的函数,都不会修改传入的参数,返回值要么是参数的副本, ...
- Drawable和Bitmap转换
一.Bitmap转Drawable Bitmap mBitMap=getYourBitMap(); //getYourBitMap()是你获取BitMap的方法 BitmapDrawable mBit ...