dom4j解析

Dom4j是一个非常优秀的Java XML API,具有性能优异、功能强大和极易使用的特点。现在很多软件采用的Dom4j,例如Hibernate,包括sun公司自己的JAXM也用了Dom4j。

注:使用Dom4j开发,需下载dom4j相应的jar文件。一般只需要导入dom4j-1.6.1.jar就可以,一旦提示没有找到类的话再将lib文件夹的jar包导入就OK

eclipse中导入jar包方法:复制jar包,粘贴到lib文件夹中,没有就新建一个,然后右键选择BuildPath Add toBuild Path 将其变成奶瓶就可以了。

小提示:在用dom4j解析时,经常会导包,当导包错误时,一般会让你强转,看到这种现象就证明你导错包了

获得Document对象的三种方式:

         1、读取XML文件,获得document对象

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

         2、解析XML形式的文本,得到document对象.

         String text ="";
             Document document = DocumentHelper.parseText(text);

         3、主动创建document对象.

                   //此处为没有XML文档,直接创建一个,其他解析器没有此方法

              Document document = DocumentHelper.createDocument();
           //创建根节点

              Element root =document.addElement("members");

节点对象的获取:

获取文档的根节点

Element  root  =  document.getRootElement();

取得某个节点的子节点.

Element  element =  node.element(“书名");

取得节点的内容

String text=node.getText();

注:获取节点也好属性也好,在dom4j中,方法名直接就是element或者attribute,没有什么getelementgetattribute的方法名

 

例:    xml version="1.0" encoding="UTF-8"?>

<书架>

               <>

                   <书名>javaweb开发书名>

                   <作者>张孝祥作者>

                   <售价>59元售价>

                  <售价>159元售价>

               >

               <>

                   <书名>JavaScript网页开发书名>

                   <作者>张孝祥作者>

                   <售价>28.00元售价>

               >

书架>

 

查找元素:

//获取:<书名name="aaa">javaweb开发书名> 节点内容

    public void test1() throws Exception{

       SAXReader reader = new SAXReader();

       Document document = reader.read(new File("src/book.xml"));

//dom4j解析只能从头开始解析从根节点书架到书再到书名,除非用到Xpath

String value = document.getRootElement().element("").element("书名").getText();

       System.out.println(value);

    }

增加元素:

//xml文档中添加一个售价节点

    public void test4() throws Exception{

       SAXReaderreader = new SAXReader();

       Documentdocument = reader.read(new File("src/book.xml"));

//添加节点直接获取要被挂的节点,用addElement方法即可,addElement自动创建节点再挂上去,并且返回element对象

document.getRootElement().element("").addElement("售价").setText("189");

       //更新XML文档

       //1、创建格式化输出器用于设置码表,否则容易出现乱码的情况

//createPrettyPrint为漂亮的书写格式,createCompactFormat为经凑的书写格式,此格式一般不给人看,用于节约空间

       OutputFormatformat = OutputFormat.createPrettyPrint();

       format.setEncoding("UTF-8");

       //2、多应用字节流,再传入格式化输出器

XMLWriter writer = new XMLWriter(new FileOutputStream("src/book.xml"),format);

       //3、将document对象传入

       writer.write(document);

       //4、关流

       writer.close();

    }

 

//xml文档的指定位置添加一个售价节点

    public void test5() throws Exception{

        获取document对象

       //创建要添加的节点

       Element e = DocumentHelper.createElement("售价");

       e.setText("39");

       //获取书下的所有子节点返回一个集合,然后按照角标再插入节点

       List list = document.getRootElement().element("").elements();

       list.add(2, e);

       更新XML文档

}

删除元素:

    //删除第二个售价节点

    public void test6() throws Exception{

       获取document对象      

//删除第二个售价节点

Element e = (Element) document.getRootElement().element("").elements("售价").get(1);

       e.getParent().remove(e);

       更新XML文档

    }

修改元素:

//修改节点的值:第二本书售价的值

       public void test7() throws Exception{

       获取document对象

        Element e = (Element)document.getRootElement().elements("").get(1);

       e.element("售价").setText("890");

           更新XML文档

        }

 

注:以上代码均可用Xpath进行简化

你可能感兴趣的:(个人javaweb学习笔记)