XML与Xpath

XML与Xpath

XML是一种具有某种层次结构的文件,Xpath则是解析这种文件的工具
接下来将会解释XML文件的结构和Xpath的基本使用,并且用Java语言进行操作展示。

XML结构

XML(可扩展标记语言)文件具有一种层次结构,由标签、元素、属性和文本组成
例如:

<?xml version="1.0" encoding="UTF-8"?>
<bookstore><book category="Fiction"><title lang="en">The Great Gatsby</title><author>F. Scott Fitzgerald</author><price>12.99</price></book><book category="Non-Fiction"><title lang="en">The Elements of Style</title><author>William Strunk Jr.</author><price>9.99</price><description><![CDATA[This is a <![CDATA[nested]]> CDATA section.]]></description></book>
</bookstore>

1、XML声明:通常出现在XML文档的开头,用于声明XML版本和字符编码。示例中的声明是

<?xml version="1.0" encoding="UTF-8"?>。

2、根元素:整个XML文档的最顶层元素,这里是。XML文档只能有一个根元素,所有其他元素都是其子元素。
3、元素:元素是XML文档的构建块,它们由开始标签和结束标签包围。例如, 和 是一对开始标签和结束标签,定义了一个元素。
4、属性:元素可以包含属性,属性提供关于元素的额外信息。在示例中,category 和 lang 是元素的属性。
5、文本:在元素的开始标签和结束标签之间的文本内容,例如,The Great Gatsby 和 F. Scott Fitzgerald 是和元素的文本内容<br/> XML文件的结构可以根据需求进行嵌套和扩展,以表示各种类型的数据和信息。这种层次结构和标记的语法使XML成为一种灵活的数据表示方式,广泛用于数据交换和存储,特别是在Web服务、配置文件和数据传输方面。<br/> 6、特殊-CDATA<br/> CDATA(Character Data)部分是XML文档中的一个特殊部分,用于包含不应由XML解析器解释的文本数据<br/> CDATA部分通常用于包含原始文本、脚本、代码片段或其他内容,这些内容可能包含特殊字符或标签,而不希望被解析为XML元素。<br/> CDATA部分以<![CDATA[开始,以]]>结束,如下所示:

<description><![CDATA[This is a <![CDATA[nested]]> CDATA section.]]>
</description>

7、特殊–DTD
DTD(Document Type Definition)是一种用于定义XML文档结构和验证其有效性的规范。DTD定义了XML文档的元素、属性、实体引用和它们之间的关系,以确保文档遵循指定的结构和规则。以下是关于DTD的一些重要信息:
元素定义:DTD定义了XML文档中可以包含哪些元素以及它们的结构。这包括元素的名称、内容类型(如文本、元素序列、混合内容等)以及它们的层次结构。
1)、属性定义:DTD也可以定义每个元素可以具有的属性、属性的数据类型,以及它们的默认值。属性可以用于提供有关元素的额外信息。
2)、实体引用:DTD支持实体引用,允许在XML文档中使用实体引用来代替常见的字符或文本。例如,< 表示小于号,> 表示大于号。
3)、文档类型声明:在XML文档的开头,可以包括一个文档类型声明,指定要使用的DTD。这有助于验证文档的结构和有效性。
4)、验证:XML解析器可以使用DTD来验证XML文档是否符合规定的结构和规则。如果文档与DTD不一致,解析器会产生错误。
以下是对开头的xml文件的定义

<!DOCTYPE bookstore [<!ELEMENT bookstore (book+)><!ELEMENT book (title, author, price)><!ELEMENT title (#PCDATA)><!ELEMENT author (#PCDATA)><!ELEMENT price (#PCDATA)><!ATTLIST book category CDATA #REQUIRED><!ATTLIST title lang CDATA #IMPLIED>
]>

在上述示例中,DTD定义了一个XML文档,其中包含bookstore元素,该元素包含至少一个book元素。每个book元素具有title、author和price子元素,并且book元素具有一个category属性,title元素具有一个可选的lang属性。
DTD对于确保XML文档的结构和有效性非常有用,但它也有一些限制和不足,包括不支持命名空间和复杂的数据类型。因此,一些应用程序选择使用XML Schema或其他模式语言来定义XML文档的结构和验证。
8、特殊–Schema
XML Schema(XML模式)是一种用于定义XML文档结构、元素、属性和数据类型的规范,它允许更精确和强大的验证和验证XML文档的有效性。与DTD(Document Type Definition)相比,XML Schema提供了更多的功能和灵活性,包括支持命名空间、更复杂的数据类型定义以及更丰富的约束。以下是有关XML Schema的一些关键信息:
1)、结构定义:XML Schema允许您定义XML文档的结构,包括元素、元素的顺序、出现次数和嵌套关系。您可以指定哪些元素是必需的,哪些是可选的,以及它们的嵌套规则。
2)、数据类型:XML Schema定义了可以用于元素和属性值的数据类型,例如字符串、整数、日期等。这允许更详细的数据验证,确保数据的格式和类型正确。
3)、约束:XML Schema支持各种约束,包括最小值、最大值、正则表达式模式、唯一性约束等。这些约束有助于确保文档数据的完整性和一致性。
4)、命名空间支持:XML Schema允许在XML文档中使用命名空间,以确保元素和属性名称的唯一性,并允许更复杂的文档结构。
5)、导入和包含:XML Schema支持模块化,可以将多个XML Schema文件组合在一起,以便更容易管理和维护模式定义。
6)、验证:XML解析器可以使用XML Schema来验证XML文档的有效性。如果文档与模式不匹配,解析器会报告错误。

<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"><xs:element name="bookstore"><xs:complexType><xs:sequence><xs:element name="book" maxOccurs="unbounded"><xs:complexType><xs:sequence><xs:element name="title" type="xs:string"/><xs:element name="author" type="xs:string"/><xs:element name="price" type="xs:decimal"/></xs:sequence><xs:attribute name="category" type="xs:string"/></xs:complexType></xs:element></xs:sequence></xs:complexType></xs:element>
</xs:schema>

在上述示例中,XML Schema定义了一个bookstore元素,它包含了多个book元素,每个book元素具有title、author和price元素,以及一个category属性。这个模式将确保XML文档遵循这一结构,并且price元素的值为十进制数。

Xpath

XPath(XML路径语言)是一种用于在XML文档中选择元素和节点的查询语言。它提供了一种灵活的方法来定位XML文档中的数据,使您能够根据元素的层次结构、属性、文本内容和其他条件来检索所需的信息。XPath通常与XML文档处理、解析和转换一起使用,以提取数据或执行特定操作。
以下是XPath的一些常见用法和语法:
1、元素选择:您可以使用XPath来选择XML文档中的元素,指定元素的路径。例如,要选择元素,可以使用路径表达式/bookstore/book。
2、属性选择:XPath允许您选择元素的属性。例如,要选择lang属性的值,可以使用路径表达式/bookstore/book/title/@lang。
3、文本内容选择:使用XPath,您可以选择元素的文本内容。例如,要选择元素的文本内容,可以使用路径表达式/bookstore/book/title/text()。<br/> 4、通配符:XPath支持通配符,如*用于匹配任何元素。例如,/bookstore/*将选择元素。<br/> 5、谓词:XPath允许您使用谓词来进一步筛选元素。例如,/bookstore/book[1]将选择第一个元素。<br/> 6、逻辑运算符:您可以在XPath中使用逻辑运算符,如and和or,来组合条件。例如,/bookstore/book[price > 20 and category = ‘Fiction’]将选择价格大于20且类别为’Fiction’的书。<br/> 7、轴:XPath提供了各种轴(如child、parent、ancestor、following-sibling等)来导航文档的层次结构。这使您可以选择相对于当前节点的其他节点。<br/> XPath在多种编程语言中都有相应的库和工具,用于解析和查询XML文档。例如,在Python中,lxml库提供了XPath查询功能。在Java中,您可以使用Java API for XML Processing (JAXP) 来执行XPath查询。

扩展–Xlink和XPoint

XLink(XML Linking Language)是一种XML标准,用于定义和表示超链接信息,使其更丰富和复杂。XLink的主要目标是提供更多的灵活性和功能,以支持链接在XML文档中的使用。以下是一些关于XLink的重要信息:
1、超链接类型:XLink引入了不同类型的超链接,包括简单链接(simple link)和扩展链接(extended link)。简单链接允许你创建基本的链接,而扩展链接允许你定义更复杂的链接关系,包括多个资源和其他属性。
2、超链接元素:XLink引入了新的元素来表示超链接信息。其中, 元素用于定义超链接, 元素用于指定资源的位置, 元素用于指定链接关系。这些元素可以包含各种属性,以定义链接的性质和行为。
3、超链接属性:XLink引入了一系列属性,如xlink:href(用于指定目标资源的位置)和xlink:type(用于指定链接的类型),这些属性用于描述超链接。
4、命名空间:XLink定义了自己的XML命名空间(通常为http://www.w3.org/1999/xlink),以将XLink的元素和属性与XML文档中的其他元素分开。
XPointer:XLink可以与XPointer一起使用,XPointer是用于定位XML文档中特定部分的标准。这使得可以创建更精确的链接,例如链接到XML文档中的特定段落或元素。
使用场景:XLink可以用于多种用途,包括在XML文档中创建超链接、定义导航菜单、构建复杂的链接结构以及在文档之间建立链接。
尽管XLink提供了更多的灵活性和功能,但它并没有在Web开发中得到广泛采用,因为HTML和其他Web标准通常提供了足够的超链接功能。然而,XLink在特定领域和应用中仍然有其用武之地,特别是在XML文档中需要更复杂链接关系的情况下。

Xpath解析XML文件

1、在idea中定义xml文件

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE bookstore SYSTEM "bookstore.dtd">
<bookstore><book category="Fiction"><title lang="en">The Great Gatsby</title><author>F. Scott Fitzgerald</author><price>12.99</price></book><book category="Non-Fiction"><title lang="en">The Elements of Style</title><author>William Strunk Jr.</author><price>9.99</price><description><![CDATA[This is a <![CDATA[nested]]> CDATA section.]]></description></book>
</bookstore>

同时在当前目录下建立一个bookstore.dtd文件

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE bookstore [<!ELEMENT bookstore (book+)><!ELEMENT book (title, author, price)><!ELEMENT title (#PCDATA)><!ELEMENT author (#PCDATA)><!ELEMENT price (#PCDATA)><!ATTLIST book category CDATA #REQUIRED><!ATTLIST title lang CDATA #IMPLIED>]>

需要注意,如果是在idea里建立的,会产生一个错误
URI is not registered (Settings | Languages & Frameworks | Schemas and DTDs)
这时需要手动注册一下这个dtd文件
1)、打开你的IDE,进入 “Settings” 或 “Preferences”。
2)、寻找 “Languages & Frameworks” 或类似的选项。
3)、在 “Languages & Frameworks” 下,选择 “Schemas and DTDs” 或类似的子选项。
4)、在 “Schemas and DTDs” 设置中,你应该看到一个列表,其中包含了已经注册的 URI,以及与之关联的 XML Schema 或 DTD 文件。
如果你的 XML 文档中使用了一个未注册的 URI,你需要将其注册。在设置中,应该有一个选项来添加或注册新的 URI。
5)、通常,你可以点击 “Add” 或 “New” 按钮,然后输入要注册的 URI。
输入 URI 后,你可以为它选择相关联的 XML Schema 文件或 DTD 文件,以便在验证时使用。
确保保存设置。
在URI框中命名为bookstore.dtd,这个需要与xml文件引入的对应
6)、现在,你的IDE应该能够正确识别和验证你的 XML 文档中使用的 URI。
2、选用Xpath工具
在Java中,你可以使用许多不同的库和工具来执行XPath查询和处理XML文档。以下是一些常见的Java XPath工具和库:
1)、Java内置XPath支持:Java标准库提供了对XPath的支持,可以使用javax.xml.xpath包中的类来执行XPath查询。这包括XPathFactory和XPath类。你可以使用XPathFactory来创建一个XPath对象,然后使用它来执行XPath查询。
2)、JDOM:JDOM是一个流行的Java库,用于解析和处理XML文档。它提供了XPath支持,你可以使用org.jdom2.input.SAXBuilder来解析XML文档,然后使用org.jdom2.XPath来执行XPath查询。
3)、DOM4J:DOM4J是另一个流行的Java库,用于处理XML文档。它提供了XPath支持,你可以使用org.dom4j.Document对象的selectNodes()方法执行XPath查询。
4)、Xerces-J:Xerces-J是Apache XML项目的一部分,是一个流行的XML解析器和处理工具包。它支持XPath查询,可以使用org.apache.xpath.XPathAPI来执行查询。
5)、Saxon:Saxon是一个功能强大的XPath和XSLT处理器,它提供了高度优化的XPath引擎,用于XML文档的查询。你可以将Saxon集成到Java应用程序中,并使用其API来执行XPath查询。
6)、XMLUnit:XMLUnit是一个用于测试XML文档的Java库,它包括XPath支持,用于验证和比较XML文档。你可以使用XMLUnit来执行XPath查询以验证XML文档的结构和内

引入依赖

<dependency><groupId>org.jdom</groupId><artifactId>jdom2</artifactId><version>2.0.6</version> <!-- 请使用最新版本 --></dependency>

代码

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/788912.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

c++11 标准模板(STL)本地化库 - 平面类别 - (std::ctype) 定义字符分类表(二)

本地化库 本地环境设施包含字符分类和字符串校对、数值、货币及日期/时间格式化和分析&#xff0c;以及消息取得的国际化支持。本地环境设置控制流 I/O 、正则表达式库和 C 标准库的其他组件的行为。 平面类别 定义字符分类表 std::ctype template< class CharT > clas…

Maven是什么? Maven的概念+作用

1.Maven的概念 Maven中文意思为“专家“、”内行“的意思&#xff0c;它是一个项目管理工具&#xff0c;可以对Java项目进行构建、依赖管理&#xff0c;通俗点 就是通过pom.xml文件的配置获取jar包不用手动的去添加jar包。 2.Maven的作用 对于大的工程&#xff0c;需要引用各…

jaihouse介绍

本文来自jaihouse在github上的仓库readme第一段。 https://github.com/siemens/jailhouse?tabreadme-ov-file 原文&#xff1a; Introduction Jailhouse is a partitioning Hypervisor based on Linux. It is able to run bare-metal applications or (adapted) operating …

morkdown语法转微信公众号排版(免费)

morkdown语法转微信公众号排版&#xff08;免费&#xff09; 源码来自githab&#xff0c;有些简单的问题我都修复了。大家可以直接去找原作者的源码&#xff0c;如果githab打不开就从我下载的网盘里下载吧。 效果

5分钟安装docker和docker compose环境

5分钟安装docker和docker compose环境 5分钟安装docker和docker compose环境环境介绍卸载docker环境安装docker安装docker compose 5分钟安装docker和docker compose环境 你好&#xff01; 这是你第一次使用 Markdown编辑器 所展示的欢迎页。如果你想学习如何使用Markdown编辑…

第21章 责任区域

< 回到目录 第21章 责任区域 “三个和尚没水吃” 。当某个行为或流程由多人负责时&#xff0c;通常该行为很难保质保量&#xff0c;甚至很难完成。 为了避免这种情况发生&#xff0c;需要将任务分门别类&#xff0c;将每个类别分配给一个人&#xff0c;注意&#xff0c;只…

IP代理池赋能Python网络爬虫

文章目录 什么是IP代理池代理服务器IP代理池的作用IP代理池的构建IP代理池的管理 相关案例IP代理在爬虫中的运用IP代理在数据收集中的运用IP代理在反爬虫中的运用 结语 什么是IP代理池 IP代理池是一个存储了多个可用代理IP地址的资源池&#xff0c;用于在网络爬虫、数据采集、…

C#属性显示

功能&#xff1a; 显示对象的属性&#xff0c;包括可显示属性、可编辑属性、及不可编辑属性。 1、MainWindow.xaml <Window x:Class"FlowChart.MainWindow"xmlns"http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x"http://sche…

Java中的数组及其使用

目录 数组的基本概念 声明数组 创建数组 初始化数组 访问数组元素 数组的遍历 使用for循环 使用for-each循环 多维数组 数组的局限性和替代品 总结 在Java中&#xff0c;数组是存储固定大小的同类型元素的容器。这意味着你可以用一个单一的变量名存储多个项目的集合…

C++(11): 智能指针shared_ptr

1. 概述 shared_ptr智能指针&#xff0c;本质是“离开作用域会自动调整(减小)引用计数&#xff0c;如果引用计数为0&#xff0c;则会调用析构函数”。这样一来&#xff0c;就进化成类似于int、float等的一种会被自动释放的类型。 2. 初始化智能指针 初始化一个智能指针的方式比…

多态的练习

练习1&#xff1a;笔试&面试 题目1&#xff1a;继承成员变量和继承方法的区别 class Base { int count 10; public void display() { System.out.println(this.count); } } class Sub extends Base { int count 20; public void display() …

深入理解ThreadLocal原理

目录 1- 什么是ThreadLocal &#xff1f;2- ThreadLocal的作用&#xff1f;ThreadLocal实现线程间资源隔离ThreadLocal实现线程内资源共享 3- ThreadLocal 原理3-1 ThreadLocalMap3-2 ThreadLocalMap的扩容&#x1f511;1. 为什么会发生扩容&#xff1f;&#x1f511;2. Thread…

Python图像表征空间频率域处理和模式分析

&#x1f3af;要点 Python空间滤波器&#xff1a;&#x1f3af;卷积计算实现均值滤波器。&#x1f3af;非线性中值滤波器。&#x1f3af;最大值/最小值滤波器。&#x1f3af;一阶导数滤波器&#xff1a;索贝尔(sobel)滤波器、普鲁伊特(Prewitt)滤波器、坎尼(Canny)滤波器。&am…

将图像转换为ASCII艺术形式

将图像转换为ASCII艺术形式 在本文中&#xff0c;我们将介绍一个使用OpenCV库将图像转换为ASCII艺术形式的简单程序。ASCII艺术是一种使用字符来表现图像的艺术形式&#xff0c;通过在终端或文本文件中显示字符的不同密度和颜色来模拟图像。这种技术已经存在了几十年&#xff…

【MySQL】7.MHA高可用配置及故障切换

什么是MHA MHA&#xff08;MasterHigh Availability&#xff09;是一套优秀的MySQL高可用环境下故障切换和主从复制的软件 mha用于解决mysql的单点故障问题&#xff1b; 出现故障时&#xff0c;mha能在0~30秒内自动完成故障切换&#xff1b; 并且能在故障切换过程中&#xff0…

史上最强 PyTorch 2.2 GPU 版最新安装教程

一 深度学习主机 1.1 配置 先附上电脑配置图&#xff0c;如下&#xff1a; 利用公司的办公电脑对配置进行升级改造完成。除了显卡和电源&#xff0c;其他硬件都是公司电脑原装。 1.2 显卡 有钱直接上 RTX4090&#xff0c;也不能复用公司的电脑&#xff0c;其他配置跟不上。…

ARM FVP平台的terminal窗口大小如何设置

当启动ARM FVP平台时&#xff0c;terminal窗口太小怎么办&#xff1f;看起来非常累眼睛&#xff0c;本博客来解决这个问题。 首先看下ARM FVP平台对Host主机的需求&#xff1a; 通过上图可知&#xff0c;UART默认使用的是xterm。因此&#xff0c;我们需要修改xterm的默认字体设…

C++语言学习(一)——关键字、命名空间、输入输出

1. C关键字 C总计63个关键字&#xff0c;C语言32个关键字 2. 命名空间 在C/C中&#xff0c;变量、函数和后面要学到的类都是大量存在的&#xff0c;这些变量、函数和类的名称将都存在于全局作用域中&#xff0c;可能会导致很多冲突。使用命名空间的目的是对标识符的名称进行本…

vue3从精通到入门9:计算属性computed

在 Vue 3 中&#xff0c;computed 是一个用于创建计算属性的工具&#xff0c;它基于组件的响应式依赖进行复杂的计算&#xff0c;并返回一个新的响应式引用。计算属性是 Vue 的一个核心概念&#xff0c;它提供了一种声明式的方式来执行基于其依赖的响应式数据的计算。 compute…

详细总结前中后序、层次遍历二叉树(非递归方法)

二叉树 结构 //二叉树节点结构 class Node<V>{V value;Node left;Node right;}之前一直学的是用递归方法进行前中后序三种遍历方法&#xff0c;没想到用非递归方法也还是挺舒服的&#xff0c;对了解树结构的应用也很有帮助 &#xff08;主要用到的思路就是借助栈或者队列…