(转)Dom4J解析

xml文档:

<?xml version="1.0" encoding="UTF-8"?>

<书架>
  <书 出版社="清华">
    <书名>Java就业培训教程</书名>
    <出版社>华</出版社>
    <出版社>清华</出版社>
    <售价>50.00元</售价>
    <内部价>40.99元</内部价>
    <作者>刘清华</作者>
  </书>
  <书>
    <书名>JavaScript网</书名>
    <作者>张孝祥</作者>
    <售价>28.00元</售价>
  </书>
</书架>  

代码演示:

package test.java;
/**
 * @author lxw
 * @date 2016年9月6日 下午10:01:55
 * @describe
 */
import java.io.FileOutputStream;
import java.util.List;
import org.dom4j.Document;
import org.dom4j.DocumentHelper;
import org.dom4j.Element;
import org.dom4j.Node;
import org.dom4j.io.OutputFormat;
import org.dom4j.io.SAXReader;
import org.dom4j.io.XMLWriter;

public class Dom4JParser {
   //测试
   public static void main(String[] args) throws Exception {
      test08();
   }
   //1、获得某个节点的具体内容 >> 获取第2本书的 【书名】
   public static void test01() throws Exception{
      //1.获取解析器
      SAXReader reader = new SAXReader();
      //2.加载XML文档
      Document document = reader.read("src/book.xml");
      //3.获取根元素
      Element root = document.getRootElement();
      //4.找第二本书的元素
      Element book = (Element)root.elements("书").get(1);
      Element name = book.element("书名");
      // 测试+打印
      System.out.println("第2本书的书名是:"+name.getText());
   }
   //2、遍历所有的元素节点,打印元素的名称
   public static void test02() throws Exception{
      SAXReader reader = new SAXReader();
      Document document = reader.read("src/book.xml");
      Element root = document.getRootElement();
      treeWalk(root);

   }
   //2.1  递归遍历
   public static void treeWalk(Element element){
      //打印元素的名字
      System.out.println(element.getName());
      //获取该元素,孩子Node的个数
      int size = element.nodeCount();
      //循环遍历
      for (int i = 0; i < size; i++) {
         //取出第i个 孩子节点
         Node node = element.node(i);
         if (node.getNodeType() == Node.ELEMENT_NODE) {
            treeWalk((Element)node);
         }
      }
   }
   //3.修改xml的主体内容 》》修改第一本书的【作者】
   public static void test03() throws Exception{
      SAXReader reader = new SAXReader();
      Document document = reader.read("src/book.xml");
      Element root = document.getRootElement();
      //1.找到作者
      Element element = (Element)root.elements("书").get(0);
      //2.修改 主题内容
      element.element("作者").setText("刘清华");
      //3.更新XML文档
      OutputFormat format = OutputFormat.createPrettyPrint();
      format.setEncoding("UTF-8");//设置格式化编码
      //默认编码就是 【UTF-8】
      XMLWriter writer = new XMLWriter(new FileOutputStream("src/book.xml"),format);
      writer.write(document);
      writer.close();
   }
   //4.增加一个节点 》》第1本书 增加 【内部价】
   public static void test04() throws Exception{
      SAXReader reader = new SAXReader();
      Document document = reader.read("src/book.xml");
      Element root = document.getRootElement();
      //1.找到第一本书
      Element book1 = root.element("书"); //默认 是 第1本  ,相当于  elements(“书”).get(0);
      //2.新建一个 节点
      Element price = DocumentHelper.createElement("作者");
      price.setText("sts");
      //3.添加
      book1.add(price);
      //4.更新XML文档
      //格式化器,使XML更规范
      OutputFormat format = OutputFormat.createPrettyPrint();
      XMLWriter writer = new XMLWriter(new FileOutputStream("src/book.xml"),format);
      writer.write(document);
      writer.close();
   }
   //5.在指定位置添加一个元素节点    》》 第一本书,作者前,增加 【出版社】
   public static void test05() throws Exception{
      SAXReader reader = new SAXReader();
      Document document = reader.read("src/book.xml");
      Element root = document.getRootElement();
      //1.找到第一本书的集合列表
      List book1 = root.element("书").elements(); //默认 是 第1本  ,相当于  elements(“书”).get(0);
      //2.新建一个 节点
      Element chuban = DocumentHelper.createElement("出版社");
      chuban.setText("华");
      //3.在list中指定位置,添加
      book1.add(1,chuban);
      //4.更新XML文档
      //格式化器,使XML更规范
      OutputFormat format = OutputFormat.createPrettyPrint();
      XMLWriter writer = new XMLWriter(new FileOutputStream("src/book.xml"),format);
      writer.write(document);
      writer.close();
   }
   //6.删除指定元素节点
   private static void test06()throws Exception{
      SAXReader reader = new SAXReader();
      Document document = reader.read("src/book.xml");
      Element root = document.getRootElement();
      //1.找到第一本书的作者
      Element book1 = root.element("书");
      Element author = book1.element("作者");
      //2.由父亲删儿子
      book1.remove(author);
      //3.更新XML文档
      //格式化器,使XML更规范
      OutputFormat format = OutputFormat.createPrettyPrint();
      XMLWriter writer = new XMLWriter(new FileOutputStream("src/book.xml"),format);
      writer.write(document);
      writer.close();
   }
   //7.对元素属性的操作
   private static void test07()throws Exception{
      SAXReader reader = new SAXReader();
      Document document = reader.read("src/book.xml");
      Element root = document.getRootElement();
      //1.找到第一本书
      Element book1 = root.element("书");
      //2.显示属性的内容
      System.out.println(book1.attributeValue("出版社"));
   }
   //8.将xml转换成String
   private static void test08() throws Exception{
      SAXReader reader = new SAXReader();
      Document document = reader.read("src/book.xml");
      //XML转换成字符串
      String text = document.asXML();
      System.out.println(text);
   }
   //9.将String 转换成为 xml
   private static void test09() throws Exception{
      String text = "<person><name>刘清华</name></person>";
      Document document = DocumentHelper.parseText(text);

      //格式化器,使XML更规范
      OutputFormat format = OutputFormat.createPrettyPrint();
      XMLWriter writer = new XMLWriter(new FileOutputStream("D:/test.xml"),format);
      writer.write(document);
      writer.close();
   }
}
 
时间: 09-04

(转)Dom4J解析的相关文章

【收藏用】--切勿转载JAVA 使用Dom4j 解析XML

原帖地址 : http://blog.csdn.NET/yyywyr/article/details/38359049 解析XML的方式有很多,本文介绍使用dom4j解析xml. 1.环境准备 (1)下载dom4j-1.6.1.jar (2)下载junit-4.10.jar 2.温馨提示 解析XML过程是通过获取Document对象,然后继续获取各个节点以及属性等操作,因此获取Document对象是第一步,大体说来,有三种方式: (1)自己创建Document对象   Document docu

转:在java中使用dom4j解析xml

在java中使用dom4j解析xml 虽然Java中已经有了Dom和Sax这两种标准解析方式 但其操作起来并不轻松,对于我这么一个初学者来说,其中部分代码是活生生的恶心 为此,伟大的第三方开发组开发出了Jdom和Dom4j等工具 鉴于目前的趋势,我们这里来讲讲Dom4j的基本用法,不涉及递归等复杂操作 Dom4j的用法很多,官网上的示例有那么点儿晦涩,这里就不写了 首先我们需要出创建一个xml文档,然后才能对其解析 xml文档: <?xml version="1.0" encod

JavaEE XML DOM4J解析

DOM4J解析 @author ixenos DOM4J常用API SAXReader reader = new SAXReader(); //Document对象也看成根节点 Document doc = reader.read(File file); //迭代当前节点下的子节点/也可foreach Iterator itr = doc.nodeIterator(); While(itr.hasNext()){ Node node = itr.next(); } //得到根节点 Element

使用DOM4J解析XMl文件与读取XML文件

XML文件 1 <?xml version="1.0" encoding="UTF-8"?> 2 <bookstore> 3 <book id="1"> 4 <name>冰与火之歌</name> 5 <author>乔治马丁</author> 6 <year>2014</year> 7 <price>89</price&g

DOM综合案例、SAX解析、StAX解析、DOM4J解析

今日大纲 1.DOM技术对xml的增删操作 2.使用DOM技术完成联系人管理 3.SAX和StAX解析 4.DOM4J解析 5.XPATH介绍 1.DOM的增删操作 1.1.DOM的增加操作 /* * 演示使用dom技术给xml中添加标签 * <book> <name id="b001">SSH</name> <author>老于</author> <price>152</price> </boo

DOM4J解析XML

Java中对XML进行解析的方式常见的为四种:SAX,DOM,JDOM,DOM4J     SAX分析器在对XML文档进行分析时,触发一系列的事件,应用程序通过事件处理函数实现对XML文档的访问.由于事件触发本身是有时序性的,因此,SAX分析器提供的是一种对XML文档的顺序访问机制,对于已经分析过的部分,不能再倒回去重新处理. SAX之所以被叫做"简单"应用程序接口,是因为SAX分析器只做了一些简单的工作,大部分工作还要由应用程序自己去做.也就是说,SAX分析器在实现时,它只是顺序地检

java使用dom4j解析xml

目标:将指定XML进行解析,以键=值的方式返回指定节点下的数据 所需要的jar包:dom4j1.6.1.jar.jaxen-1.1.jar <?xml version="1.0" encoding="UTF-8"?> <SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:SOAP-ENC="http://s

java dom4j解析xml实例(2)

java利用dom4j解析xml 需要的jar包: dom4j官方网站在 http://www.dom4j.org/ 下载dom4j-1.6.1.zip 解开后有两个包,仅操作XML文档的话把dom4j-1.6.1.jar加入工程就可以了,如果需要使用XPath的话还需要加入包jaxen-1.1-beta-7.jar(如果不导入这个架包程序可以执行出结果,但最后会报异常) 将相关jar包引入后,实际解析操作如下:  1.要解析的xml文件province.xml: <china dn="d

Dom4j解析语音数据XML文档(注意ArrayList多次添加对象,会导致覆盖之前的对象)

今天做的一个用dom4j解析声音文本的xml文档时,我用ArrayList来存储每一个Item的信息,要注意ArrayList多次添加对象,会导致覆盖之前的对象:解决方案是在最后将对象添加入ArrayLis时先new 一个对象,然后将之前那个对象的属性set到新的对象中,之后在加入到 ArrayList,就不会出错了. package parseXML; import org.dom4j.Attribute;import org.dom4j.Document;import org.dom4j.E

使用dom4j解析XML文档

dom4j的包开源包,不属于JDK里面,在myeclipse中要单独导入在项目中,这里不累赘了 做这个过程,很慢,因为很多方法没用过不熟悉,自己得去查帮助文档,而且还得去试,因为没有中文版,英文翻译不准确,也会导致多个同名的方法理解和用法不同 XML: <?xml version="1.0" encoding="utf-8"?> <students> <student age="25"> <name>