网站首页 > java教程 正文
前言
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包,或者在https://sourceforge.net/projects/dom4j/?source=directory下载了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只是操作起来步骤更多而已,其思路都是类似的。祝大家学有所成
猜你喜欢
- 2024-10-17 Qt开发-DOM方式解析XML(qt开发工具)
- 2024-10-17 JAVA 操作笔记-XML(六)(xml在java中怎么用)
- 2024-10-17 作为一名程序猿,你不可不知的Java基础知识的三十个经典问答
- 2024-10-17 Android中XML文件解析,现在了解还不晚
- 2024-10-17 JSP 标准标签库(JSTL)(jsp标签库有哪些)
- 2024-10-17 Spring源码阅读:Spring XML解析机制
- 2024-10-17 XML文件(xml文件怎么打开)
- 2024-10-17 Python如何解析HTML和XML数据(python解析html xml最好的模块)
- 2024-10-17 深入解析Python中的XML处理:理论与实践的结合
- 2024-10-17 XML的解析方式(xml的解析方式有哪些)
你 发表评论:
欢迎- 05-16SpringBoot整合Redis实现常用功能
- 05-16基于Redis实现简单的延时消息队列
- 05-16安装Redis
- 05-16Spring系列之Redis的两种集成方式
- 05-16Django连接Redis集群问题排查思路和总结
- 05-16只需5分钟,完成Redis所有命令操作~
- 05-16熟练使用 Redis 的 5 大数据结构:Java 实战教程
- 05-16Redis 常见业务场景及实例(Java)
- 最近发表
- 标签列表
-
- java反编译工具 (77)
- java反射 (57)
- java接口 (61)
- java随机数 (63)
- java7下载 (59)
- java数据结构 (61)
- java 三目运算符 (65)
- java对象转map (63)
- Java继承 (69)
- java字符串替换 (60)
- 快速排序java (59)
- java并发编程 (58)
- java api文档 (60)
- centos安装java (57)
- java调用webservice接口 (61)
- java深拷贝 (61)
- 工厂模式java (59)
- java代理模式 (59)
- java.lang (57)
- java连接mysql数据库 (67)
- java重载 (68)
- java 循环语句 (66)
- java反序列化 (58)
- java时间函数 (60)
- java是值传递还是引用传递 (62)
本文暂时没有评论,来添加一个吧(●'◡'●)