用Dom4j来解析XML文件

Dom4j jar包地址https://pan.baidu.com/s/1eNExExlFHIecfW_6YkXpvw  提取码:w5om

首先解压Dom4j jar包,解压后如下

然后把  dom4j-1.6.1.jar  复制放到工程目录下(集成开发工具是myeclipse)

在myeclipse工程下直接右键dom4j-1.6.1.jar,点击Build Path → Add to Build Path

myeclipse自动导入jar包,然后就可以使用jar包提供的接口了。

我们创建一个book.xml文件放到src目录下

book.xml文件内容如下:

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

<书架>
  <书 >
    <书名>时间简史</书名>
    <作者>霍金</作者>
    <售价>60</售价>
  </书>
  <书>
    <书名>广义相对论</书名>
    <作者>爱因斯坦</作者>
    <售价>65</售价>
  </书>
</书架>

Dom4j_parseXML.java编写解析代码

需要导入的包:

import java.io.FileOutputStream;
import java.util.List;


import org.dom4j.Document;
import org.dom4j.Element;
import org.dom4j.Node;
import org.dom4j.io.OutputFormat;
import org.dom4j.io.SAXReader;
import org.dom4j.io.XMLWriter;

注意:除了FileOutputStream和List不是dom4j包的,其他的都是

创建解析器

//创建dom4j解析器
SAXReader reader = new SAXReader();
//加载document对象
Document document = reader.read("src/book.xml");

得到某个节点的内容

//拿到根节点
Element root = document.getRootElement();
//拿到所有的书节点
List<Element> list = root.elements("书");
//拿到第二本书
Element bookE1 = list.get(1);
//获取售价文本
System.out.println(bookE1.elementText("售价"));

遍历所有元素节点

public static void ergodic(Document document) {
  treeWalk( document.getRootElement() );
}

public static void treeWalk(Element element) {
  for ( int i = 0, size = element.nodeCount(); i < size; i++ ) {
    Node node = element.node(i);
    if ( node instanceof Element ) {
      System.out.println(node.getName());
      treeWalk( (Element) node );
    }
  }
}

修改某个元素节点的主体内容

//获取根节点
Element root = document.getRootElement();
//拿到第二种书节点
Element bookEL = (Element) root.elements("书").get(1);
//拿到售价节点
Element priceE1 = bookEL.element("售价");
//改变主体内容
priceE1.setText("55");

//将结果保存到硬盘上

XMLWriter writer = new XMLWriter(new FileOutputStream("src/book.xml"),OutputFormat.createPrettyPrint());
writer.write(document);
writer.close();

向指定元素节点中添加子元素节点

//获取根节点
Element root = document.getRootElement();
//拿到第一种书节点
Element bookEL = (Element) root.elements("书").get(0);
//拿到售价节点
Element priceE1 = bookEL.element("售价");

//添加子节点
priceE1.addElement("内部价").setText("50");

//将结果保存到硬盘上

XMLWriter writer = new XMLWriter(new FileOutputStream("src/book.xml"),OutputFormat.createPrettyPrint());
writer.write(document);
writer.close();

向指定元素节点上增加同级元素节点

//获取根节点
Element root = document.getRootElement();
//拿到第一种书节点
Element bookEL = (Element) root.elements("书").get(0);

//给书节点添加子节点
bookEL.addElement("批发价").setText("30");

//将结果保存到硬盘上

XMLWriter writer = new XMLWriter(new FileOutputStream("src/book.xml"),OutputFormat.createPrettyPrint());
writer.write(document);
writer.close();

删除指定的元素节点

Element root = document.getRootElement();
Element bookEL = (Element) root.elements("书").get(0);
Element insideprice = bookEL.element("售价").element("内部价");
//删除
insideprice.getParent().remove(insideprice);

//将结果保存到硬盘上

XMLWriter writer = new XMLWriter(new FileOutputStream("src/book.xml"),OutputFormat.createPrettyPrint());
writer.write(document);
writer.close();

操作文件的属性

//获取根节点
Element root = document.getRootElement();
//拿到第一种书节点
Element bookEL = (Element) root.elements("书").get(0);

//增加一个属性
bookEL.addAttribute("类", "科普");

//将结果保存到硬盘上

XMLWriter writer = new XMLWriter(new FileOutputStream("src/book.xml"),OutputFormat.createPrettyPrint());
writer.write(document);
writer.close();

以上就是用dom4j来解析XML文件的几种方式

猜你喜欢

转载自www.cnblogs.com/pw-fight/p/10400288.html