最近两天公司事比较多,这两天自己主要跟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. 用Java实现菱形的打印输出

    import java.util.Scanner; public class dengyao2 { public dengyao2() { super(); } public static void ...

  2. xml和xsl配合使用实例

    找到一个实际应用的例子,是英语统考打印准考证的实例,关于xml和xsl配合使用的. 下面看看xml文档 <?xml version='1.0' encoding='utf-8' ?> &l ...

  3. IAR EWARM PRINTF/SCANF FORMATTER

    The linker automatically chooses an appropriate formatter for printf- and scanf-related function bas ...

  4. ISO 9141-2 and ISO 14230-2 INITIALIZATION and DATA TRANSFER

    http://ecad.tu-sofia.bg/et/2005/pdf/Paper097-P_Dzhelekarski1.pdf INITIALIZATION Prior to any diagnos ...

  5. 初步认识pg_control文件之一

    这个据说是PostgreSQL的control file. 到底如何呢,先看看改名后如何,把pg_control文件改名,然后启动 Postgres,运行时得到信息: [postgres@pg101 ...

  6. MiinCMP1.0 SAE 新浪云版公布, 开源企业站点系统

    MiinCMP是一款开源企业站点系统,除可执行于256M左右100元的国内IDC外,JUULUU聚龙软件团队最近开发了面向新浪云的版本号,该版本号可将站点免费布署到新浪云SAE上.MiinCMP採用j ...

  7. C#程序通过模板自动创建Word文档

    引言:前段时间有项目要用c#生成Word格式的计算报告,通过网络查找到很多内容,但是都很凌乱,于是自己决定将具体的步骤总结整理出来,以便于更好的交流和以后相似问题可以迅速的解决! 现通过具体的示例演示 ...

  8. DLX舞蹈链 hdu5046

    题意: 在N个城市选出K个城市,建飞机场(1 ≤ N ≤ 60,1 ≤ K ≤ N),N个城市给出坐标,选择这K个机场,使得从城市到距离自己最近的机场的 最大的距离 最小. 输出这个最小值. 思路: ...

  9. LuaFileSystem学习心得

    LuaFileSystem(简称lfs)是一个用于lua进行文件訪问的库,和Lua版本号同步.且是跨平台的,在为lua安装lfs之前须要先安装luarocks, luarocks是一个用于安装lua库 ...

  10. Android-----使用Button特效 selector+shape

    当然除了使用drawable这样的图片外今天谈下自定义图形shape的方法,对于Button控件Android上支持以下几种属性shape.gradient.stroke.corners等. 我们就以 ...