Dom4j框架解析XML

简介: 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就分享到这里啦!!


相关文章
|
21小时前
|
XML Web App开发 JavaScript
XML DOM 解析器
**XML DOM解析器将XML转换为JavaScript对象,允许在浏览器中操作XML。
|
22小时前
|
XML Web App开发 JavaScript
XML DOM 解析器
XML DOM解析器是浏览器内置的功能,用于将XML转换为JavaScript对象以便操作。通过XMLHttpRequest对象,如`xhttp.open()`和`xhttp.send()`发送请求获取XML文件,然后`responseXML`属性将返回的XML转换为DOM,允许通过JavaScript遍历和修改XML结构。
|
22小时前
|
XML JavaScript 数据格式
XML DOM 节点树
这是一个关于XML DOM节点树的描述,提到了从第一个子节点到最后一个子节点的内容。示例XML片段包含书籍信息:书名&quot;Giada De Laurentiis&quot;,出版年份&quot;2005&quot;和价格&quot;30.00&quot;。
|
22小时前
|
XML JavaScript 数据格式
XML DOM 遍历节点树
该文介绍了如何遍历XML文档的节点树。通过示例代码展示了如何使用DOM解析XML,遍历并打印出所有子节点的名称和值,以提取所需信息。实例中,XML数据包含书籍详情,程序逐个输出了这些细节。
|
1天前
|
XML JavaScript 数据格式
XML DOM 浏览器差异
现代浏览器均支持W3C DOM规范,但存在处理空白和换行的差异。例如,XML文档中的换行和空格可能作为文本节点被其他浏览器识别,但Internet Explorer不会。示例代码显示,加载XML文件后,不同浏览器计算根元素子节点数量的结果不同,IE显示4个,而其他浏览器显示9个。
|
1天前
|
XML JavaScript 数据格式
XML DOM 浏览器差异
不同浏览器在解析XML DOM时存在差异,尤其是对待空白和换行的方式。当XML文档中包含换行和空格时,Internet Explorer不会将它们视为文本节点,而其他浏览器则会。例如,一个XML文档在简单编辑器中可能有CR/LF和空格,导致在IE中根元素有4个子节点,但在其他浏览器中有9个子节点。示例代码通过加载XML文件并输出子节点数量来展示这一差异。
|
2天前
|
XML JavaScript 数据格式
XML DOM 节点树
这是一个关于XML DOM节点树的描述,提到了从第一个子节点到最后一个子节点的内容。示例XML片段展示了一本书的信息:书名&quot;Giada De Laurentiis&quot;,出版年份&quot;2005&quot;和价格&quot;30.00&quot;。
|
2天前
|
XML Web App开发 JavaScript
XML DOM 解析器
浏览器内置的XML解析器将XML转换为JavaScript可访问的DOM对象,允许遍历、操作XML节点。通过XMLHttpRequest加载XML文档,如示例所示,创建XMLHTTP对象,打开并发送GET请求到服务器,然后将响应解析为XML DOM。
|
2天前
|
XML JavaScript 关系型数据库
Python XML 解析
Python XML 解析
|
3天前
|
XML JavaScript 数据格式
XML DOM 浏览器差异
现代浏览器虽支持W3C DOM规范,但在处理XML空白和换行时存在差异。IE不将空白或换行视为文本节点,而其他浏览器则会。例如,一个包含CR/LF和空格的XML文档在IE中会有4个子节点,而在其他浏览器中会有9个。示例代码通过加载XML文件并输出子节点数量来展示这一差异。

推荐镜像

更多