博客
关于我
使用Java操作xml文档
阅读量:514 次
发布时间:2019-03-07

本文共 5594 字,大约阅读时间需要 18 分钟。

使用Java操作xml文档

DOM文档对象模型

DOM(Document Object Model)定义了访问和操作XML文档的标准方法。DOM将XML文档转化为树状结构,通过DOM树可以完成对文档中的所有元素的读写操作。

DOM结构概述

在DOM模型中,XML文档被解析为一个Document对象,Document对象下包含多个Element对象。每个Element对象又可能包含子Element对象、Attribute对象或是Text内容。

Dom4j

Dom4j是一个功能强大且易于使用的开源库,专为解析XML设计。它在性能、功能和可用性上具有显著优势。

Dom4j安装和配置

Dom4j可以通过百度搜索找到官方文档地址及安装教程。安装完成后,只需依次使用SAXReader解析XML文件即可。

读取Xml数据

依次使用Dom4j读取并解析XML文件

package com.example;import org.dom4j.Document;import org.dom4j.DocumentException;import org.dom4j.Element;import org.dom4j.io.SAXReader;public class XmlReader {    public void readXml(String filePath) {        try {            SAXReader reader = new SAXReader();            Document document = reader.read(filePath);            Element root = document.getRootElement();                        // 获取所有"employee"节点            List
employees = root.elements("employee"); for (Element employee : employees) { // 获取employee节点的属性 System.out.println("员工编号:" + employee.attribute("no").getText()); // 获取名称 System.out.println("员工姓名:" + employee.element("name").getText()); // 获取年龄 System.out.println("年龄:" + employee.element("age").getText()); // 获取薪资 System.out.println("薪资:" + employee.element("salary").getText()); // 获取部门信息 Element department = employee.element("department"); System.out.println("部门名称:" + department.element("dname").getText()); System.out.println("部门地址:" + department.element("address").getText()); System.out.println("#################################"); } } catch (DocumentException e) { e.printStackTrace(); } } public static void main(String[] args) { XmlReader reader = new XmlReader(); reader.readXml("hr.xml"); }}

写入Xml数据

通过Dom4j写入XML文件,具体操作如下:

package com.example;import org.dom4j.Document;import org.dom4j.DocumentException;import org.dom4j.Element;import org.dom4j.io.SAXWriter;public class XmlWriter {    public void writeXml(String filePath) {        try {            // 解决File读取流程问题            SAXWriter writer = new SAXWriter(new java.io.FileOutputStream(filePath, false), "UTF-8");            Document document = writer.read(new java.io.File("hr.xml"));            Element root = document.getRootElement();            // 创建新员工节点            Element newEmployee = root.addElement("employee");            newEmployee.setAttribute("no", "4233");            // 添加员工信息            newEmployee.addElement("name").setText("x3");                        // 添加年龄            newEmployee.addElement("age").setText("22");                        // 添加薪资            newEmployee.addElement("salary").setText("3622");                        // 添加部门信息            Element department = newEmployee.addElement("department");            department.addElement("dname").setText("会计部");            department.addElement("address").setText("XX大厦-B102");            // 写入文件            writer.write(document);            writer.close();        } catch (Exception e) {            e.printStackTrace();        }    }    public static void main(String[] args) {        XmlWriter writer = new XmlWriter();        writer.writeXml("hr.xml");    }}

XPath路径表达式

XPath是用于查询和操作XML数据的强大工具。掌握XPath可以极大简化XML数据提取操作。

XPath基础知识

  • 元素选择:xpath表达式用于选取文档中指定节点的元素。例如,/hr/employee表示选取hr下直接子元素employee。

  • 属性选择:使用@符号可以获取元素属性。例如,//employee[@no='3309']表示选取no属性为3309的所有employee节点。

  • 节点选择:通用节点选择用*,而具体选择用elementName。例如,//employee表示选取所有employee节点,而*/employee表示选取所有注意下的employee节点。

XPath案例分析

以下是几个常见的XPath表达式示例:

  • 选取所有书店的书籍://bookstore/book

  • 选取拥有特定属性的节点://employee[@no='4233']

  • 选取特定位置的节点:/bookstore/book[2]

  • 复合选择://employee[name='x1'] | //employee[name='x2']

XPath代码示例

以下是使用Dom4j进行XPath查询的代码示例:

package com.example;import org.dom4j.Document;import org.dom4j.DocumentException;import org.dom4j.Element;import org.dom4j.Node;import org.dom4j.io.SAXReader;public class XPathTest {    public void xpathTest(String xpathExp) {        try {            SAXReader reader = new SAXReader();            Document document = reader.read(new java.io.File("hr.xml"));                        List
nodes = document.selectNodes(xpathExp); for (Node node : nodes) { Element emp = (Element) node; System.out.println("员工编号:" + emp.attributeValue("no")); System.out.println("员工姓名:" + emp.elementText("name")); System.out.println("员工年龄:" + emp.elementText("age")); System.out.println("员工薪资:" + emp.elementText("salary")); System.out.println("员工部门名称:" + emp.element("department").elementText("dname")); System.out.println("员工部门地址:" + emp.element("department").elementText("address")); System.out.println("#################################"); } } catch (DocumentException e) { e.printStackTrace(); } } public static void main(String[] args) { XPathTest test = new XPathTest(); // 测试多个xpath表达式 test.xpath("/hr/employee"); test.xpath("//employee"); test.xpath("//employee[salary<4000]"); test.xpath("//employee[name='x1']"); test.xpath("//employee[@no='3309']"); test.xpath("//employee[1]"); test.xpath("//employee[last()]"); test.xpath("//employee[position()<6]"); test.xpath("//employee[3] | //employee[1]"); }}

希望以上内容能帮助您更好地理解和使用Java操作XML文档。

转载地址:http://chijz.baihongyu.com/

你可能感兴趣的文章
Python在def函数中使用for循环
查看>>
Python在def函数中使用for循环
查看>>
Python在Conda环境中,但在Windows虚拟环境中没有激活
查看>>
python系列【仅供参考】:python pip 错误 ModuleNotFoundError: No module named pip._internal 解决办法
查看>>
python图像条状状噪声,使用PYTHON PIL从验证码图像中删除背景嘈杂的线条
查看>>
Python图像处理:从内存加载jpeg
查看>>
python固定后缀(名物化词汇)词频统计:抽取+统计+可视化
查看>>
python商品评论数据采集与分析可视化系统 Flask框架 requests爬虫 NLP情感分析 毕业设计 源码
查看>>
python商品数据分析可视化系统(带爬虫)京东销售数据分析 计算机毕业设计 源码下载
查看>>
python商品库存管理系统 django框架 商品网站 MySQL数据库 源码下载 计算机毕业设计
查看>>
Python哪个版本最稳定好用2023.10.19
查看>>
Python和黑客技术的渊源
查看>>
Python和RF编写接口自动化
查看>>
Python和RF编写web自动化
查看>>
python和js哪个难_【Python】记一次学习,Python 与 js 在实现闭包时的差异
查看>>
python和java哪个更值得学——来自知乎高赞回答
查看>>
python和c混合编程 github_在pycharm中使用git版本管理以及同步github的方法
查看>>
python命名空间更改_Python模块xml.etree.ElementTree自动修改xml命名空间键
查看>>
Python命名中尾随下划线有什么好处?
查看>>
Python启动脚本
查看>>