最近两天公司事比较多,这两天自己主要跟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. android如何实现开机自动启动Service或app

    第一步:首先创建一个广播接收者,重构其抽象方法 onReceive(Context context, Intent intent),在其中启动你想要启动的Service或app. import and ...

  2. 【转载】Fragment 全解析(1):那些年踩过的坑

    http://www.jianshu.com/p/d9143a92ad94 Fragment系列文章:1.Fragment全解析系列(一):那些年踩过的坑2.Fragment全解析系列(二):正确的使 ...

  3. Ember学习(8):REOPENING CLASSES AND INSTANCES

    英文原址:http://emberjs.com/guides/object-model/reopening-classes-and-instances/ 你不须要一次就完毕类所有内容的定义,通过reo ...

  4. 从客户端(&)中检测到有潜在危险的 Request.Path 值解决方案

    出这个问题基本上是在转址字符串中有非法字符“<”,'&'之类的. 方案1: 如果仅仅只是转换页面,传参时出现的问题,可对数据加密: 绑定数据传值时加密 <%#Server.UrlE ...

  5. 微信浏览器如何禁止iPhone手机上下滑动网页

    代码: /*去掉iphone手机滑动默认行为*/ $('body').on('touchmove', function (event) { event.preventDefault(); });

  6. 创建C#串口通信程序详解

    在.NET平台下创建C#串口通信程序,.NET 2.0提供了串口通信的功能,其命名空间是System.IO.Ports.这个新的框架不但可以访问计算机上的串口,还可以和串口设备进行通信.我们将使用标准 ...

  7. C#调用Excel VBA宏

    近日的一系列工作是做网站的营运维护,因此做了大量的支持工具.有Excel中写VBA的,也有直接C#做的工具.有时需要在C#中执行Excel VBA宏,甚至有时还需要在执行了VBA宏之后,获取返回值再进 ...

  8. [程序猿入行必备]CSS样式之优先级

    专业玩家请移步:http://www.w3.org/TR/CSS2/cascade.html 使用CSS控制页面样式时,常常出现设定的样式被"覆盖",不能生效的情况. 浏览器是根据 ...

  9. SAO总结

    Application Structure Web App-------------------------------------------------------------->Serve ...

  10. 项目优化经验分享(八)TeamLeader经验总结

    引言 通过前面的七篇博客.我把自己在项目优化过程的经验进行了分享,今天这篇博客,作为一个总结,就来讲讲作为一个TeamLeader,在项目管理中遇到的问题和解决经验! 正文 问题一:团队之间怎么沟通? ...