Dom4j框架解析XML

本文涉及的产品
全局流量管理 GTM,标准版 1个月
云解析 DNS,旗舰版 1个月
公共DNS(含HTTPDNS解析),每月1000万次HTTP解析
简介: Dom4j框架解析XML

一、前言

1.什么是XML解析

       XML解析是指将XML格式数据转换成计算机程序能够理解的数据结构的过程。XML解析器可以将XML文件解析成DOM(文档对象模型)、SAX(简单API for XML)等不同的数据结构。通过对XML文件进行解析,程序可以读取和操作其中的数据,从而实现对XML文件的数据分析和处理。常用的XML解析库包括Java中的DOM解析器和SAX解析器,C++中的libxml2库和TinyXML库,Python中的ElementTree库和lxml库等。

2.为什么要学习XML解析

1.处理XML数据:XML是广泛使用的数据存储格式,因此学习XML解析可以帮助我们读取并处理这些数据。

2.跨平台支持:由于XML可以在不同的操作系统和编程语言之间进行交换,因此学习XML解析可以使你的代码更具可移植性和互操作性。

3.对XML数据进行操作:解析XML可以使你从XML数据中获取到所需的信息,进而对其进行操作。

4.手动读取XML文件:学会XML解析之后,你可以手动读取XML文件而无需使用特殊的软件,更方便。

5.了解相关解析技术:XML解析是一种思考问题和设计算法的能力,学习后可了解相关技术,提高编程能力。

3.怎么学习XML解析

1.了解 XML 文件的基本结构和语法规则

2.掌握各种 XML 解析器的 API,如 DOM、SAX、StAX、JDOM、Dom4j 等;

3.了解 XPath 表达式的语法和使用方法;

4.应用 XML 解析器和 XPath 表达式来提取 XML 文档中的信息,了解处理 XML 数据的常用技巧;

5.实践中遇到的一些常见问题和解决方法。

二、XML解析器使用

1.获取Java中配置文件的路径

在项目中xml位置可能存在于同包、不同包、安全路径(WEB-INF)下,那我们应该用怎样的方式获取配置文件以及读取

同包的情况

 InputStream is = Test01.class.getResourceAsStream("db.properties");
     Properties p = new Properties();
     p.load(is);
     System.out.println(p.getProperty("url"));

代码解析:首先使用 getResourceAsStream() 方法读取了同包下名为 db.properties 的文件, 然后通过Properties 类的 load() 方法加载了读取到的数据。 最后,通过 getProperty() 方法获取指定键(即属性名)对应的值。

不同包的情况(.properties)

 InputStream iss = Test01.class.getResourceAsStream("/config.properties");
     //不同包只需添加“/”即可
     Properties pp = new Properties();
     pp.load(iss);
     System.out.println(pp.getProperty("url"));

注意:这里的配置文件后缀都是.properties。所以要用到Properties 类,而Properties 类是 Java 提供的一个处理配置文件的工具类, 专门用于读取以键值对形式存储的配置文件。 这个工具类继承自 Hashtable类,因此在处理配置文件时,可以使用键值对进行存储和读取

不同包的情况(.xml)

InputStream is = Test01.class.getResourceAsStream("/students.xml");
    SAXReader sr=new SAXReader();
    Document read = sr.read(is);
    System.out.println(read.asXML());

这里用到的就不是Properties 类了,而是SAXReader,详细了解移至2.Dom4j 框架SAXReader的使用查看。

安全路径(WEB-INF)情况

package XW.J2EE.XML02;
import java.io.IOException;
import java.io.InputStream;
import java.util.Properties;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/**
 * 获取web-inf下的文件
 */
@WebServlet("/Test02")
public class Test02 extends HttpServlet {
  protected void doGet(HttpServletRequest request, HttpServletResponse response)
      throws ServletException, IOException {
    doPost(request, response);
  }
  protected void doPost(HttpServletRequest request, HttpServletResponse response)
      throws ServletException, IOException {
    InputStream iss = request.getServletContext().getResourceAsStream("/WEB-INF/db.properties");
    Properties pp = new Properties();
    pp.load(iss);
    System.out.println(pp.getProperty("url"));
  }
}

代码解析:通过使用 Servlet API 提供的ServletContext对象来读取WEB-INF 目录下的配置文件。ServletContext 对象是在应用程序启动时创建的,用于存储 Web应用程序的上下文信息。

2.Dom4j 框架SAXReader的使用

2.1.Dom4j框架

Dom4j 是一个开源的 XML 解析框架,它基于 Java 的 sax 解析器和 jaxp 解析器开发,提供了灵活简便、性能优良、扩展性强的 XML 解析和生成功能。

2.2.SAXReader的使用

SAXReader的常用方法

方法 方法描述
asXML() 获取将当前节点及其所有子节点转换为 XML 字符串,并返回该字符串
read() 用于从输入源中读取 XML 文档,并将其生成一个 org.dom4j.Document 对象,表示完整的 XML 文档
selectNodes() 获取符合条件的节点列表,该方法会返回list集合
selectSingleNode() 获取符合条件的节点。该方法会返回一个 Element 对象
getText() 获取节点内容
attributeValue() 获取节点属性值

案例:获取config包下student.xml

 

InputStream is = Test01.class.getResourceAsStream("/students.xml");
    SAXReader sr=new SAXReader();
    Document read = sr.read(is);
    //获取符合条件的节点列表,该方法会返回list集合
    List<Element> selectNodes = read.selectNodes("/students/student");
    for (Element element : selectNodes) {
      System.out.println("selectNodes:"+element.asXML());
      //获取符合条件的第一个节点。该方法会返回一个 Element 对象
      Element strele = (Element) element.selectSingleNode("name");
      //获取节点内容
      System.out.println("selectSingleNode:"+strele.getText());
      //获取节点属性
      System.out.println("attributeValue:"+element.attributeValue("sid"));
    }

 

注意:selectSingleNode方法返回的最好是Element对象,需要强转,如果是Node对象,有些功能可能没有。因为Element对象是Node对象的子类,由于Java多态的特点,子类更为强大。

3.xpath的使用

3.1.什么是xpath

XPath (XML Path Language) 是一种用于在 XML 文档中定位节点的语言,它提供了一种简单而强大的方式来查询、选择、遍历和修改 XML 文档中的节点元素。

3.2.语法

/ :定位路径

@ :属性

例如,我们还是拿到config包下student.xml的节点student属性为s002的学员姓名

平常的思路

    InputStream is = Test01.class.getResourceAsStream("/students.xml");
    SAXReader sr=new SAXReader();
    Document read = sr.read(is);
    //System.out.println(read.asXML());
    //获取符合条件的节点列表,该方法会返回list集合
    List<Element> selectNodes = read.selectNodes("/students/student");
    for (Element element : selectNodes) {
      //获取sid为‘s002’的姓名
      if("s002".equals(element.attributeValue("sid"))) {
        Element strele = (Element) element.selectSingleNode("name");
        //获取节点内容
        System.out.println(strele.getText());
      }
    }

xpath的思路

//xpath的使用定位路径用“/”,属性用“@”
    Element xpath = (Element) read.selectSingleNode("/students/student[@sid='s002']/name");
    String text = xpath.getText();
    System.out.println("xpath:"+text);

结果是一样的,但是xpath更为简洁。

关于Dom4j框架解析XML就分享到这里啦!!


相关文章
|
28天前
|
JavaScript 前端开发 Go
CSS 与 JS 对 DOM 解析和渲染的影响
【10月更文挑战第16天】CSS 和 JS 会在一定程度上影响 DOM 解析和渲染,了解它们之间的相互作用以及采取适当的优化措施是非常重要的。通过合理的布局和加载策略,可以提高网页的性能和用户体验,确保页面能够快速、流畅地呈现给用户。在实际开发中,要根据具体情况进行权衡和调整,以达到最佳的效果。
|
29天前
|
存储 Java
深入探讨了Java集合框架中的HashSet和TreeSet,解析了两者在元素存储上的无序与有序特性。
【10月更文挑战第16天】本文深入探讨了Java集合框架中的HashSet和TreeSet,解析了两者在元素存储上的无序与有序特性。HashSet基于哈希表实现,添加元素时根据哈希值分布,遍历时顺序不可预测;而TreeSet利用红黑树结构,按自然顺序或自定义顺序存储元素,确保遍历时有序输出。文章还提供了示例代码,帮助读者更好地理解这两种集合类型的使用场景和内部机制。
38 3
|
1月前
|
XML JSON API
ServiceStack:不仅仅是一个高性能Web API和微服务框架,更是一站式解决方案——深入解析其多协议支持及简便开发流程,带您体验前所未有的.NET开发效率革命
【10月更文挑战第9天】ServiceStack 是一个高性能的 Web API 和微服务框架,支持 JSON、XML、CSV 等多种数据格式。它简化了 .NET 应用的开发流程,提供了直观的 RESTful 服务构建方式。ServiceStack 支持高并发请求和复杂业务逻辑,安装简单,通过 NuGet 包管理器即可快速集成。示例代码展示了如何创建一个返回当前日期的简单服务,包括定义请求和响应 DTO、实现服务逻辑、配置路由和宿主。ServiceStack 还支持 WebSocket、SignalR 等实时通信协议,具备自动验证、自动过滤器等丰富功能,适合快速搭建高性能、可扩展的服务端应用。
101 3
|
19天前
|
编解码 JavaScript 前端开发
在跨平台虚拟 DOM 框架中处理动画效果
【10月更文挑战第25天】在跨平台虚拟 DOM 框架中处理动画效果需要综合运用多种技术和方法,充分考虑不同平台的特点和性能要求,通过合理的设计和优化,实现高效、流畅且具有良好兼容性的动画效果,从而为用户提供更加丰富和生动的交互体验。
101 63
|
19天前
|
JavaScript 前端开发 算法
框架为什么要设计虚拟 dom?
【10月更文挑战第26天】框架设计虚拟 DOM 是为了在性能优化、开发效率提升、可维护性增强以及跨平台适配等方面提供更好的解决方案。它有效地解决了传统前端开发中存在的诸多问题,使得前端开发更加高效、灵活和可维护,为构建复杂的现代 Web 应用和跨平台应用提供了有力的支持。
34 6
|
1月前
|
XML Web App开发 JavaScript
XML DOM 解析器
XML DOM 解析器
|
13天前
|
存储 Java 开发者
Java中的集合框架深入解析
【10月更文挑战第32天】本文旨在为读者揭开Java集合框架的神秘面纱,通过深入浅出的方式介绍其内部结构与运作机制。我们将从集合框架的设计哲学出发,探讨其如何影响我们的编程实践,并配以代码示例,展示如何在真实场景中应用这些知识。无论你是Java新手还是资深开发者,这篇文章都将为你提供新的视角和实用技巧。
12 0
|
1月前
|
JavaScript 前端开发 算法
React 虚拟 DOM 深度解析
【10月更文挑战第5天】本文深入解析了 React 虚拟 DOM 的工作原理,包括其基础概念、优点与缺点,以及 Diff 算法的关键点。同时,分享了常见问题及解决方法,并介绍了作者在代码/项目上的成就和经验,如大型电商平台的前端重构和开源贡献。
57 3
|
1月前
|
XML Web App开发 JavaScript
XML DOM 解析器
XML DOM 解析器
|
1月前
|
XML Web App开发 JavaScript
XML DOM 解析器
XML DOM 解析器

推荐镜像

更多