博客
关于我
使用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/

你可能感兴趣的文章
MySQL中的GROUP_CONCAT()函数详解与实战应用
查看>>
MySQL中的IO问题分析与优化
查看>>
MySQL中的ON DUPLICATE KEY UPDATE详解与应用
查看>>
mysql中的rbs,SharePoint RBS:即使启用了RBS,内容数据库也在不断增长
查看>>
mysql中的undo log、redo log 、binlog大致概要
查看>>
Mysql中的using
查看>>
MySQL中的关键字深入比较:UNION vs UNION ALL
查看>>
mysql中的四大运算符种类汇总20多项,用了三天三夜来整理的,还不赶快收藏
查看>>
mysql中的字段如何选择合适的数据类型呢?
查看>>
MySQL中的字符集陷阱:为何避免使用UTF-8
查看>>
mysql中的数据导入与导出
查看>>
MySQL中的时间函数
查看>>
mysql中的约束
查看>>
MySQL中的表是什么?
查看>>
mysql中穿件函数时候delimiter的用法
查看>>
Mysql中索引的分类、增删改查与存储引擎对应关系
查看>>
Mysql中索引的最左前缀原则图文剖析(全)
查看>>
MySql中给视图添加注释怎么添加_默认不支持_可以这样取巧---MySql工作笔记002
查看>>
Mysql中获取所有表名以及表名带时间字符串使用BetweenAnd筛选区间范围
查看>>
Mysql中视图的使用以及常见运算符的使用示例和优先级
查看>>