您的位置 首页 java

成都校区*精品*Dom4J解析XML的范例浅析

前言

XML是可扩展标记语言的缩写,在编程领域是非常常用的,我们经常会用它进行数据的传输或者用作配置文件,那么对XML的操作的也会是我们需要掌握的一项技术,本文会使用 Java 语言,利用DOM4J这个非常优秀的开源库,探讨生成XML格式数据和解析XML数据的两个方面的问题。

1. Dom4J简介

  • 在Dom4j.org上,是这么介绍的:Dom4j是一个易用的、开源的库,用于XML,XPath和XSLT。它应用于Java平台,采用了Java集合框架并完全支持DOM,SAX和JAXP。
  • 简单来说,Dom4j具有性能优秀,操作简单的优点

2. Dom4j的使用

  • 2.1 导入jar包
  • 这个操作非常简单,我们可以在网上下载jar包,或者在下载了dom4j项目之后,解压缩成jar包,然后导入项目中
  • 2.2 案例一:用Java代码生成xml文档
  • 代码思路:我们要生成一个XML文档,其实就像我们平时书写文档是一样的道理:
  • 创建文档 -> 创建根元素 -> 添加根元素
  • 子元素也是先创建再添加到其他元素中
  • 如果元素上有属性则先添加属性
  • 下面直接上代码
  • [Java]
  • import java. io .FileOutputStream;
  • import java.io.FileWriter;
  • import org.dom4j.Document;
  • import org.dom4j.DocumentHelper;
  • import org.dom4j. Element ;
  • import org.dom4j.io.OutputFormat;
  • import org.dom4j.io.XMLWriter;
  • public class Dom4JTest1 {
  • public static void main(String[] args) throws Exception {
  • // 第一种方式:创建文档,并创建根元素
  • // 创建文档:使用了一个Helper类
  • Document document = DocumentHelper.createDocument();
  • // 创建根节点并添加进文档
  • Element root = DocumentHelper.createElement(“student”);
  • document.setRootElement(root);
  • // 第二种方式:创建文档并设置文档的根元素节点
  • Element root2 = DocumentHelper.createElement(“student”);
  • Document document2 = DocumentHelper.createDocument(root2);
  • // 添加属性
  • root2.addAttribute(“name”, “zhangsan”);
  • // 添加子节点:add之后就返回这个元素
  • Element helloElement = root2.addElement(“hello”);
  • Element worldElement = root2.addElement(“world”);
  • helloElement.setText(“hello Text”);
  • worldElement.setText(“world text”);
  • // 输出
  • // 输出到控制台
  • XMLWriter xmlWriter = new XMLWriter();
  • xmlWriter.write(document);
  • // 输出到文件
  • // 格式
  • OutputFormat format = new OutputFormat(” “, true );// 设置缩进为4个空格,并且另起一行为true
  • XMLWriter xmlWriter2 = new XMLWriter(
  • new FileOutputStream(“student.xml”), format);
  • xmlWriter2.write(document2);
  • // 另一种输出方式,记得要调用flush()方法,否则输出的文件中显示空白
  • XMLWriter xmlWriter3 = new XMLWriter( new FileWriter(“student2.xml”),
  • format);
  • xmlWriter3.write(document2);
  • xmlWriter3.flush();
  • // close()方法也可以
  • }
  • }
  • 程序Console输出:
  • [XML]
  • <? xml version=”1.0″ encoding=”UTF-8″?>
  • < student />
  •   生成的一个xml文档:
  • <? xml version=”1.0″ encoding=”UTF-8″?>
  • < student name=”zhangsan”>
  • < hello >hello Text</ hello >
  • < world >world text</ world >
  • </ student >
  • 小总结 到目前为止我们已经完成了对一个xml格式数据的生成,如果要生成其他样式的数据,也是比较类似的操作,本文就不再赘述了。
  • 2.3 案例二:读入xml文档并分析,将其内容输出
  • 了解了实现思想后,我们就直接改写顺序查找算法,用二分查找思想来实现查找
  • [XML]
  • <? xml version=”1.0″ encoding=”UTF-8″?>
  • < students name=”zhangsan”>
  • < hello name=”lisi”>hello Text1</ hello >
  • < hello name=”lisi2″>hello Text2</ hello >
  • < hello name=”lisi3″>hello Text3</ hello >
  • < world name=”wangwu”>world text1</ world >
  • < world name=”wangwu2″>world text2</ world >
  • < world >world text3</ world >
  • </ students >
  • 代码思路:由外而内的取获取节点读取数据
  • 获取整个文档
  • 获取根元素students
  • 遍历根元素students获取每个子元素
  • 然后通过元素拿到对应的名称、属性值等数据

以下是代码实现

[Java]

import java.io.File;

import java.util.Iterator;

import java.util.List;

import javax.xml.parsers.DocumentBuilder;

import javax.xml.parsers.DocumentBuilderFactory;

import org.dom4j.Document;

import org.dom4j.Element;

import org.dom4j.io.DOMReader;

import org.dom4j.io.SAXReader;

public class Dom4JTest2 {

public static void main(String[] args) throws Exception {

SAXReader saxReader = new SAXReader();

// 获取文档对象

Document document = saxReader.read( new File(“students.xml”));

// 获取根元素

Element root = document.getRootElement();

System.out.println(“Root: ” + root.getName());

// 获取所有子元素

List<Element> childList = root.elements();

System.out.println(“total child count: ” + childList.size());

// 获取特定名称的子元素

List<Element> childList2 = root.elements(“hello”);

System.out.println(“hello child: ” + childList2.size());

// 获取名字为指定名称的第一个子元素

Element firstWorldElement = root.element(“world”);

// 输出其属性

System.out.println(“first World Attr: ”

+ firstWorldElement.attribute(0).getName() + “=”

+ firstWorldElement.attributeValue(“name”));

System.out.println(“迭代输出———————–“);

// 迭代输出

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

Element e = (Element) iter.next();

System.out.println(e.attributeValue(“name”));

}

System.out.println(“用DOMReader———————–“);

DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();

DocumentBuilder db = dbf.newDocumentBuilder();

// 注意要用完整类名

org.w3c.dom.Document document2 = db.parse( new File(“students.xml “));

DOMReader domReader = new DOMReader();

// 将JAXP的Document转换为dom4j的Document

Document document3 = domReader.read(document2);

Element rootElement = document3.getRootElement();

System.out.println(“Root: ” + rootElement.getName());

}

}

控制台输出:

Root: studentstotal child count: 6hello child: 3first World Attr: name=wangwu迭代输出———————–lisilisi2lisi3wangwuwangwu2null用DOMReader———————–Root: students

3. 总结

到目前为止我们已经用Dom4j完成了生成XML文档以及解析XML文档的操作,相信大家已经对Dom4j有了一定的了解,更复杂的XML只是操作起来步骤更多而已,其思路都是类似的。祝大家学有所成

文章来源:智云一二三科技

文章标题:成都校区*精品*Dom4J解析XML的范例浅析

文章地址:https://www.zhihuclub.com/188504.shtml

关于作者: 智云科技

热门文章

网站地图