1.XML的作用
-
用来保存数据,而且这些数据具有自我描述性.
-
它还可以作为项目或者模板的配置文件
-
还可以作为网络传输数据的格式(现在以JSON为主)
2.配置位置及读取方式
2.1.存于根目录下
//获取存于根目录下的config.xml文件 InputStream is = Demo.class.getResourceAsStream("/config.xml"); System.out.println(is);
如果不存在,则输出为null;
/代表获取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
案例演示,敬请期待....