XML解析及作用

2 篇文章 0 订阅

1.XML的作用

  • 用来保存数据,而且这些数据具有自我描述性.

  • 它还可以作为项目或者模板的配置文件

  • 还可以作为网络传输数据的格式(现在以JSON为主)

2.配置位置及读取方式

2.1.存于根目录下

//获取存于根目录下的config.xml文件
InputStream is = Demo.class.getResourceAsStream("/config.xml"); 
System.out.println(is);
  1. 如果不存在,则输出为null;

  2. /代表获取src根目录的绝对路径

2.2.存于同一包下

//获取存放于同一包下的config.xml文件
InputStream is = Demo2.class.getResourceAsStream("config.xml"); 
System.out.println(is);

2.3.存于WEB-INF目录下

//获取ServletContext()域对象
ServletContext sc=this.getServletContext();
//WebContent或WebRoot目录下WEB-INF目录中的文件路径
InputStream is=sc.getResourceAsStream(“/WEB-INF/db.properties”);

2.4.Properties配置文件读写

在src根路径下或同包名目录下创建一个config.properties文件。

public static void main(String[] args) {
    try {
        //获取src根目录下的config.properties文件
        InputStream is = Demo.class.getResourceAsStream("/config.properties");
        //创建Properties对象
        Properties pro=new Properties();
        //加载properties文件数据流
        pro.load(is);
        System.out.println(pro.getProperty("id"));
        System.out.println(pro.getProperty("name"));
    } catch (IOException e) {
        e.printStackTrace();
    }
}

3.Java中XML解析方式

3.1.DOM解析器

DOM的全称是Document Object Model,也即文档对象模型。它定义了一个接口,使程序能够访问和更新 XML 文档的样式、结构和内容。

应用场景

  • 需要获取文档结构数据。

  • 需要移动 XML 文档的各个部分,可能想要对某些元素进行排序。

  • 要多次使用 XML 文档中的信息。

常见的DOM解析器接口

  • Node :DOM 的基本数据类型。

  • Element : 您将处理的绝大多数对象都是元素。

  • Attr : 表示元素的属性。

  • Text : 元素或属性的实际内容。

  • Document : 代表整个 XML 文档。Document 对象通常被称为 DOM 树。

常用的DOM解析器方法

方法说明
Document.getDocumentElement()返回文档的根元素
Node.getFirstChild()返回给定节点的第一个子节点
Node.getLastChild()返回给定节点的最后一个子节点
Node.getNextSibling()这些方法返回给定节点的下一个兄弟节点
Node.getPreviousSibling()这些方法返回给定节点的前一个兄弟节点
Node.getAttribute(attrName)对于给定的节点,它返回具有请求名称的属性

3.2.SAX解析器

SAX(Simple API for XML)是一个基于事件的 XML 文档解析器。与 DOM 解析器不同,SAX 解析器不创建解析树。SAX 是 XML 的流接口,这意味着使用 SAX 的应用程序接收有关正在处理的 XML 文档的事件通知、元素和属性,从文档顶部开始,以文档的结束结束。

应用场景

  • 需要从上到下以线性方式处理 XML 文档。

  • 该文档没有深度嵌套。

  • 正在处理一个体积非常大的 XML 文档,它的 DOM 树会消耗太多内存。典型的 DOM 实现使用十个字节的内存来表示一个字节的 XML。

  • 要解决的问题只涉及到 XML 文档的一部分。

  • 解析器一解析到数据就可用,因此 SAX 非常适用于通过流处理方式读取的 XML 文档

SAX解析器的缺点

  • 不能随机访问 XML 文档,因为它是以只进方式处理的。

  • 如果需要跟踪解析器看到的数据或更改项目的顺序,必须自己编写代码并存储数据。

3.3.JDOM解析器

JDOM 是一个开源的、基于 Java 的库,用于解析 XML 文档。它通常是 Java 开发人员友好的 API。它是 Java 优化的,它使用 Java 集合,如 List 和 Arrays。JDOM 与 DOM 和 SAX API 一起工作,并结合了两者的优点。它占用的内存很少,几乎与 SAX 一样快。

应用场景

  • 需要获取 XML 文档的结构。

  • 需要移动 XMl 文档的各个部分,可能想要对某些元素进行排序。

  • 需要多次使用 XML 文档中的信息。

JDOM 类

  • Document : 代表整个 XML 文档。Document 对象通常被称为 DOM 树。

  • Element :代表一个 XML 元素。元素对象具有操作其子元素、文本、属性和名称空间的方法。

  • Attribute :表示元素的属性。属性具有获取和设置属性值的方法。它有父类型和属性类型。

  • Text : 表示 XML 标签的文本。

  • Comment : 表示 XML 文档中的注释。

常见的 JDOM 方法

方法说明
SAXBuilder.build(xmlSource)从 xml 源构建 JDOM 文档
Document.getRootElement()获取 XML 的根元素
Element.getName()获取 XML 节点的名称
Element.getChildren()获取元素的所有直接子节点
Node.getChildren(Name)获取具有给定名称的所有直接子节点
Node.getChild(Name)获取具有给定名称的第一个子节点

3.4.DOM4j解析器

DOM4J 是一个开源的、基于 Java 的库,用于解析 XML 文档。它是一个高度灵活且内存高效的 API。它是 Java 优化的,并使用了像 List 和 Arrays 这样的 Java 集合。DOM4J 适用于 DOM、SAX、XPath 和 XSLT。它可以以非常低的内存占用解析大型 XML 文档。

应用场景

  • 需要获取 XML 文档的结构。

  • 需要移动 XML 文档的各个部分,可能想要对某些元素进行排序。

  • 需要多次使用 XML 文档中的信息。

DOM4J 类

  • Document :代表整个 XML 文档。Document 对象通常被称为 DOM 树。

  • Element : 代表一个 XML 元素。元素对象具有操作其子元素、文本、属性和命名空间的方法。

  • Attribute : 表示元素的属性。属性具有获取和设置属性值的方法。它有父类型和属性类型。

  • Node :代表元素、属性或处理指令。

常见的 DOM4J 方法

方法说明
SAXReader.read(xmlSource)从 XML 源构建 DOM4J 文档
Document.getRootElement()获取 XML 文档的根元素
Element.node(index)获取元素中特定索引处的 XML 节点
Element.attributes()获取元素的所有属性
Node.valueOf(@Name)获取给定元素名称的属性值

3.5.XPath解析器

XPath 是万维网联盟 (W3C) 的官方推荐。它定义了一种在 XML 文件中查找信息的语言。它用于遍历 XML 文档的元素和属性。XPath 提供了多种类型的表达式,可用于从 XML 文档中查询相关信息。

XPath的优势

  • 结构定义: XPath 定义 XML 文档的部分,如元素、属性、文本、名称空间、处理指令、注释和文档节点。

  • 路径表达式: XPath 提供强大的路径表达式,例如 XML 文档中的选择节点或节点列表。

  • 标准函数: XPath 提供了丰富的标准函数库,用于操作字符串值、数值、日期和时间比较、节点和 QName 操作、序列操作、布尔值等。

  • XSLT 的主要部分:XPath 是 XSLT 标准中的主要元素之一,必须对 XPath 有足够的了解才能使用 XSLT 文档。

  • W3C 推荐: XPath 是万维网联盟 (W3C) 的官方推荐。

XPath 路径表达式

XPath 使用路径表达式从 XML 文档中选择节点或节点列表。以下是从 XML 文档中选择任何节点/节点列表的有用路径和表达式列表。

路径表达式描述
node-name选择具有给定名称“nodename”的所有节点
/选择从根节点开始
//选择从与选择匹配的当前节点开始
.选择当前节点
..选择当前节点的父节点
@选择属性
student示例: 选择名称为“student”的所有节点
class/student示例: 选择作为班级孩子的所有学生元素
//student选择所有学生元素,无论它们在文档中的什么位置

4.dom4j+xpath解析XML

案例演示,敬请期待....

  • 43
    点赞
  • 39
    收藏
    觉得还不错? 一键收藏
  • 30
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 30
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值