Dom4j框架解析XML

本文涉及的产品
全局流量管理 GTM,标准版 1个月
云解析DNS,个人版 1个月
云解析 DNS,旗舰版 1个月
简介: 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就分享到这里啦!!


相关文章
|
1天前
|
XML Web App开发 JavaScript
XML DOM 解析器
Most browsers have a built-in XML parser that converts XML into a JavaScript accessible object (XML DOM).
|
1天前
|
XML Web App开发 JavaScript
XML DOM 解析器
解析器把 XML 转换为 JavaScript 可存取的对象(XML DOM)。
|
2天前
|
XML JavaScript 数据格式
XML DOM 遍历节点树
Traversal means looping or moving through a node tree in XML DOM. &quot;Traversal of the node tree&quot; often occurs when extracting each element&#39;s value from an XML document. Here&#39;s an example that loops through all child nodes of an `xmlDoc` and displays their names and values:
|
4天前
|
XML 存储 JavaScript
XML DOM - 访问节点
DOM 允许访问 XML 文档的每个节点, 主要通过三种方式: 1. 使用 `getElementsByTagName()` 方法; 2. 循环遍历节点树; 3. 利用节点间关系导航。 此方法返回一个节点列表(Node List),实质为节点数组。示例代码加载 &quot;books.xml&quot; 到 `xmlDoc`,并存储结果到变量 `x`。
|
4天前
|
XML JavaScript 数据格式
XML DOM 浏览器差异
**XML DOM Browser Variances** Modern browsers support the W3C DOM spec, yet differ in handling whitespace & line breaks within XML nodes, often inserted by simple editors like Notepad. IE omits empty spaces/line breaks as text nodes, unlike others.
|
4天前
|
XML JavaScript 数据格式
XML DOM 浏览器差异
**XML DOM 浏览器差异摘要** 现代浏览器均支持W3C DOM标准,但在处理空白与换行上存在差异。XML文件中常见的CR/LF与空格,在不同编辑器下编辑时尤为明显。如示例所示,IE不将空白视为文本节点,而其他浏览器则计入。运行代码`document.write(&quot;Number of child nodes: &quot; + xmlDoc.documentElement.childNodes.length);`,IE显示4个子节点,其余浏览器显示9个,体现了解析上的不一致性。
|
4天前
|
XML Web App开发 JavaScript
XML DOM 解析器
大多数浏览器内置XML解析器,将XML转化为JavaScript可访问的XML DOM对象。XML DOM提供遍历、访问、插入和删除节点的功能。文档须先加载至DOM。示例代码通过XMLHTTP请求加载`books.xml`,兼容多种浏览器,响应设置为XML DOM用于后续处理。
|
5天前
|
XML Web App开发 JavaScript
XML DOM 解析器
**XML DOM解析器将XML转换为JS对象,便于操作。浏览器内置XML解析器,通过XMLHttpRequest或ActiveXObject加载XML如&quot;books.xml&quot;。
|
1天前
|
XML JavaScript 数据格式
XML DOM 遍历节点树
Traversal means looping or moving through a node tree in XML DOM.
|
2天前
|
XML JavaScript 数据格式
XML DOM 浏览器差异
所有 modern browsers 支持 W3C DOM, 但在处理 XML 中的空白和换行上有差异。例如, 使用记事本编辑的 XML 可能包含 CR/LF 和额外空格:

推荐镜像

更多