最近两天公司事比较多,这两天自己主要跟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. jquery validate使用

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  2. PL/pgSQL学习笔记之十一

    http://www.postgresql.org/docs/9.1/static/plpgsql-declarations.html 39.3.4. Row 类型 name table_name%R ...

  3. flash builder 4.6使用profile(概要分析)调试性能

    最近用调试flex的性能,发现fb自带有性能调试工具profile,折腾好一段时间终于成功用上 环境:flash builder 4.6,myeclipse 10(fb装独立版,再以插件形式绑定到my ...

  4. 基于Andoird 4.2.2的同步框架源代码学习——同步发起端

    关键组件: ContentResolver ContentService SyncManager SyncManager.ActiveSyncContext SyncManager.SyncOpera ...

  5. 【M24】了解虚方法、多继承、虚基类、RTTI的成本

    1.编译器必须实现出C++语言的特性.一般情况下,我们只需要使用这些特性就好了,不需要关心内部的实现细节.但是,有些特性的实现,会对对象的大小和成员方法的执行速度造成影响.因此,有必要了解内部实现的细 ...

  6. EasyUI-右键菜单变灰不可用效果

    使用过EasyUI的朋友想必都知道疯狂秀才写的后台界面吧,作为一个初学者我不敢妄自评论它的好坏,不过它确实给我们提供了一个很好框架,只要在它的基础上进行修改,基本上都可以满足我们开发的需要. 知道“疯 ...

  7. Codeforces Round #335 (Div. 2) A. Magic Spheres 水题

    A. Magic Spheres Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://www.codeforces.com/contest/606/ ...

  8. Theatre Square

    http://codeforces.com/problemset/problem/1/A Theatre Square time limit per test 2 seconds memory lim ...

  9. Eclipse使用jre的原理与配置

    近期要配置Eclipse环境,Mark当中的一些方法. 下载Eclipse SDK之后我们就要关联JRE,由于Eclipse启动须要JRE. Eclipse启动时寻找JRE的顺序: 1.假设eclip ...

  10. [Ramda] Filter, Reject and Partition

    We'll learn how to get a subset of an array by specifying items to include with filter, or items to ...