最近两天公司事比较多,这两天自己主要跟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的一个小例子的更多相关文章

  1. java连接mysql的一个小例子

    想要用java 连接数据库,需要在classpath中加上jdbc的jar包路径 在eclipse中,Project的properties里面的java build path里面添加引用 连接成功的一 ...

  2. 关于java赋值运算的一个小例子

    直接贴代码,这个也是做题目中遇见的,觉得很好奇,查了一波,然后自己编写代码看了一下,果真如此,哈哈哈...... public class 关于Boolean的赋值运算 { public static ...

  3. Java操作XML的JAXB工具

    在java中操作XML的工作中中,比较方便的工具是JAXB(Java Architecture for XML Binding). 利用这个工具很方便生成XML的tag和Java类的对应关系.参照网上 ...

  4. JDBC数据源(DataSource)数据源技术是Java操作数据库的一个很关键技术,流行的持久化框架都离不开数据源的应用。

    JDBC数据源(DataSource)的简单实现   数据源技术是Java操作数据库的一个很关键技术,流行的持久化框架都离不开数据源的应用. 2.数据源提供了一种简单获取数据库连接的方式,并能在内部通 ...

  5. MVVM模式的一个小例子

    使用SilverLight.WPF也有很长时间了,但是知道Binding.Command的基本用法,对于原理性的东西,一直没有深究.如果让我自己建一个MVVM模式的项目,感觉还是无从下手,最近写了一个 ...

  6. 使用Trinity拼接以及分析差异表达一个小例子

    使用Trinity拼接以及分析差异表达一个小例子  2017-06-12 09:42:47     293     0     0 Trinity 将测序数据分为许多独立的de Brujin grap ...

  7. Spring和Hibernate结合的一个小例子

    1.新建一个SpringHibernate的maven项目 2.pom文件的依赖为 <dependency> <groupId>junit</groupId> &l ...

  8. Hibernate入门1 - Hibernate概述及第一个小例子

    一.什么是ORM? ORM,即Object Relational Mapping.我们知道,利用面向对象的思想编写的数据库应用程序最终都是把对象信息保存在关系型数据库中,于是需要编写与底层数据库相关的 ...

  9. Java操作xml文件

    Bbsxml.java public class Bbsxml { private String imgsrc; private String title; private String url; p ...

随机推荐

  1. 不用FTP使用SecureCRT上传下载文件,并解决rz、sz command not found异常

    使用SSH终端操作Linux/UNIX时,很多时候需要传一些文件到服务器上,或说从服务器上下载一些文件,这类文件传输动作一般使用FTP即可,但是需要架设FTP Server,每次传输不太方便,还要另外 ...

  2. Hadoop on Mac with IntelliJ IDEA - 6 解决KeyValueTextInputFormat读取时只有key值问题

    本文讲述使用KeyValueTextInputFormat在Hadoop 0.x正常工作.Hadoop 1.2.1失效的解决过程. 环境:Mac OS X 10.9.5, IntelliJ IDEA ...

  3. li中包含span,在IE6、IE7下会有3pxbug

    如果给每个li里面加个span标签的话,在IE6,IE7下看,li与li之间的距离就会多了3px. 解决方法:在li中加vertical-align:middle; <div class=&qu ...

  4. JavaScript Design Patterns: Mediator

    The Mediator Design Pattern The Mediator is a behavioral design pattern in which objects, instead of ...

  5. [Angular2 Form] Create and Submit an Angular 2 Form using ngForm

    Forms in Angular 2 are essentially wrappers around inputs that group the input values together into ...

  6. Eclipse启动Tomcat时,45秒超时解决方案

    在Eclipse中启动Tomcatserver时,常常因为系统初始化项目多,导致出现45秒超时的Tomcatserver启动错误,出现以下的错误. 曾经我们一般通过找到XML配置文件,将相应Timeo ...

  7. css笔记 css用法:

    前端框架:AdminLTE  https://almsaeedstudio.com/themes/AdminLTE/index2.html CSS学习教程: http://www.divcss5.co ...

  8. 动漫网站基于jquery的横向手风琴特效

    今天给大家分享一款动漫网站基于jquery的横向手风琴特效.这款手风琴特效适用浏览器:IE8.360.FireFox.Chrome.Safari.Opera.傲游.搜狗.世界之窗.效果图如下: 在线预 ...

  9. C#使用Monitor类、Lock和Mutex类进行多线程同步

    在多线程中,为了使数据保持一致性必须要对数据或是访问数据的函数加锁,在数据库中这是很常见的,但是在程序中由于大部分都是单线程的程序,所以没有加锁的必要,但是在多线程中,为了保持数据的同步,一定要加锁, ...

  10. easyui datagrid 列拖拽

    首先easyui 它有提供了拖拽的功能Draggable,那我们就可以想 拖拽标题头到另外的标题头上面我们就对datagrid的columns重新绑定一次 并刷新datagrid这个功能不就行了? & ...