Dom4j解析xml(一)

 xml是一种通用的数据交换的格式,为实现计算机之间的文档交换而设计的文档内容编写规范,语法与HTML相似.XML的作用:统一信息的结构,实现不同系统之间的相互通信
目前许多系统的配置文件都使用XML格式,例如现在流行的SSH框架的配置文件都用的是xml的格式,配置文件就是记录应用程序的配置信息的文件。XML 是一种标记语言,通过使用标记来说明文本的意义和所代表的信息。XML 没有固定的标记,允许用户随便发明和创建自己的标记。XML文档是树形结构的。以下是xml基本语法的注意事项,下面将用个正确的例子做为参考!元素和属性:
1.XML 文档的主体由元素组成。一个XML元素由一个标记来定义,包括开始和结束标记以及其中的内容
2.没有嵌套在其他元素内的元素叫做根元素
3.若元素中没有嵌套子元素和数据,这样的元素叫做空元素
4.所有的标记都必须有结束标记或者使用空元素的结束说明
5.XML 中不允许使用标签交叉来破坏文档的结构化层次关系
6.XML标记名称区分大小写
7.XML标记名称中不能包括空格
8.可以为 XML 标签设置属性,XML中的属性也可以随便定义。一个标签可以有多个属性,每个属性都有名称和取值
9.XML 中属性值一定要用双引号或单引号引起来

例题:<?xml version="1.0" encoding="UTF-8"?>
<customers>
 <customer id="101" sex="man">
  <name>Tom</name>
  <age>12</age>
  <email>tom@sina.com</email>
 </customer>
 <customer id="102" sex="women">
  <name>Jerry</name>
  <age>22</age>
  <email>jerry@sohu.com</email>
 </customer>
</customers>

    现在再来介绍下DOM4J,我初开始看到这个名词的时候,把它读成了“动物世界”,呵,其实这个读法是错误的,4只能读成four!佟老师说,这样才算专业的!不过再说DOM4J自己前先介绍下xml的四种解析技术与比较:

1.DOM:DOM 解析器把 XML 文档转化为一个包含其内容的树,并能够对树进行遍历。用 DOM 解析模型的长处是编程容易,能够很容易的添加和修改树中的元素。然而由于使用 DOM 解析器的时候需要处理整个 XML 文档,所以对性能和内存的需要比较高,尤其是碰到很大的 XML 文档的时候。
2.SAX:SAX 解析器采用了基于事件的模型(在解析 XML 文档的时候能够触发一系列的事件,当发现给定的tag的时候,他能够激活一个回调方法,告诉该方法定制的标签已找到)。因为他让程序员自己来决定所要处理的tag,所以当只需要处理文档中所包含的部分数据时,SAX 有良好的表现。但用 SAX 解析器的时候编码工作会比较困难,而且很难同时访问同一个文档中的多处不同数据。
3.JDOM:JDOM的目的是成为 Java 特定文档模型,他简化和 XML 的交互并且比使用 DOM 实现更快。
4.DOM4J:DOM4J 是很优秀的Java XML API,具备性能优异、功能强大和极端易用使用的特点,同时他也是个开放源代码的软件。如今越来越多的 Java 软件都在使用 DOM4J 来读写 XML

以上可以看出DOM4J解析技术的巨大优势了!

Document对象相关
1.读取XML文件,获得document对象.             
                   SAXReader reader = new SAXReader();         

                   Document   document = reader.read(new File("input.xml"));

2.解析XML形式的文本,得到document对象.
                   String text = "<members></members>";           

                   Document document = DocumentHelper.parseText(text);

3.主动创建document对象.
                  Document document = DocumentHelper.createDocument();  //创建根节点
                  Element root = document.addElement("members");

节点相关
1.获取文档的根节点.
      Element rootElm = document.getRootElement();

2.取得某节点的单个子节点.
     //"member"是节点名
     Element memberElm=root.element("member");

3.取得节点的文字
      String text=memberElm.getText();

      也可以:
      //这个是取得根节点下的name字节点的文字.
      String text=root.elementText("name");


4.取得某节点下名为"member"的所有字节点并进行遍历. 

List nodes = rootElm.elements("member");

for (Iterator it = nodes.iterator(); it.hasNext();) { 

                 Element elm = (Element) it.next();

                // do something

}

5.对某节点下的所有子节点进行遍历.    

for(Iterator it=root.elementIterator();it.hasNext();){

      Element element = (Element) it.next();      

      // do something   

}

6.在某节点下添加子节点.Element ageElm = newMemberElm.addElement("age");
7.设置节点文字.ageElm.setText("29");

8.删除某节点.//childElm是待删除的节点,parentElm是其父节点
    parentElm.remove(childElm);
9.添加一个CDATA节点.

Element contentElm = infoElm.addElement("content");

contentElm.addCDATA(diary.getContent());
属性相关
1.取得某节点下的某属性   Element root=document.getRootElement();       //属性名name
                         Attribute attribute=root.attribute("size");
2.取得属性的文字    String text=attribute.getText();
也可以://这个是取得根节点下name字节点的属性firstname的值.
    String text2=root.element("name").attributeValue("firstname");
3.遍历某节点的所有属性   Element root=document.getRootElement();   

for(Iterator it=root.attributeIterator();

           it.hasNext();){        

         Attribute attribute = (Attribute) it.next();

        String text=attribute.getText();        

        System.out.println(text);   }

4.设置某节点的属性和文字. newMemberElm.addAttribute("name", "sitinspring");

5.设置属性的文字.  Attribute attribute=root.attribute("name");   

                   attribute.setText("sitinspring");
6.删除某属性   //属性名name
     Attribute attribute=root.attribute("size"); root.remove(attribute);

将文档写入XML文件
1.文档中全为英文,不设置编码,直接写入的形式.

XMLWriter writer = new XMLWriter(new  FileWriter("output.xml")); 

 writer.write(document);

 writer.close();

2.文档中含有中文,设置编码格式写入的形式.OutputFormat format = OutputFormat.createPrettyPrint();// 指定XML编码                   

format.setEncoding("GBK");       

XMLWriter writer = new XMLWriter(newFileWriter("output.xml"),format);

writer.write(document);

writer.close();

以上是今天上课的主要内容,具体的例题见:Dom4j解析xml(二)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值