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 是
<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,您可以选择元素的文本内容。例如,要选择
扩展–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>
代码
相关文章:
XML与Xpath
XML与Xpath XML是一种具有某种层次结构的文件,Xpath则是解析这种文件的工具 接下来将会解释XML文件的结构和Xpath的基本使用,并且用Java语言进行操作展示。 XML结构 XML(可扩展标记语言)文件具有一种层次结构,由标签…...
【c++20】CPP-20-STL-Cookbook 学习笔记
Cpp20-STL-Cookbook-src简单的阅读笔记。c++20更好用了,比如STL 包含了一些这样的辅助函数,比如 make_pair() 和make_tuple() 等。 这些代码现在已经过时了,但是为了与旧代码兼容,会保留这些代码。比如 可以声明是一个std的string:Sum s1 {1u, 2.0, 3, 4.0f }?...
Python 之 Flask 框架学习
毕业那会使用过这个轻量级的框架,最近再来回看一下,依赖相关的就不多说了,直接从例子开始。下面示例中的 html 模板,千万记得要放到 templates 目录下。 Flask基础示例 hello world from flask import Flask, jsonify, url_fora…...
精品丨PowerBI负载测试和容量规划
当选择Power BI作为业务报表平台时,如何判断许可证的选择是否符合业务需求,价格占了主导因素。 Power BI的定价是基于SKU和服务器内核决定的,但是很多IT的负责人都不确定自己公司业务具体需要多少。 不幸的是,Power BI的容量和预期…...
【算法-PID】
算法-PID ■ PID■ 闭环原理■ PID 控制流程■ PID 比例环节(Proportion)■ PID 积分环节(Integral)■ PID 微分环节(Differential) ■ 位置式PID,增量式PID介绍■ 位置式 PID 公式■ 增量式 PI…...
ros rosbag使用记录
rosbag: 1. rosbag record -a 记录当前所有消息(较少用)2. rosbag record -O bag_name.bag /topic 记录指定消息3. rosbag info 查阅bag文件信息4. rosbag play 播放bag文件内容5. python script 查看bag文件内容参考: 1. rosbag record -a 记…...
WebKit结构揭秘:探秘网页渲染的魔法之源
一、WebKit之心:渲染引擎的魔力 WebKit的渲染引擎是其核心所在,它犹如一位技艺高超的魔法师,将HTML、CSS和JavaScript的魔法咒语转化为绚丽的网页画面。它解析代码,绘制页面,让网页内容跃然屏上,展现出无尽…...
VSCode美化
今天有空收拾了一下VSCode,页面如下,个人觉得还是挺好看的~~ 1. 主题 Noctis 色彩较多,有种繁杂美。 我使用的是浅色主题的一款Noctis Hibernus 2. 字体 Maple Mono 官网:Maple-Font 我只安装了下图两个字体,使…...
Runes 生态一周要览 ▣ 2024.3.25-3.31|Runes 协议更新 BTC 减半在即
Runes 生态大事摘要 1、Casey 发布了 Runes 协议文档 RUNES HAVE DOCS,Github 代码库更新到 ord 0.17.0 版本,Casey 表示符文是一个“严肃”的代币协议。 2、Casey 公布了第一个硬编码的创世符文「UNCOMMONGOODS」 3、4月7日香港沙龙|聚焦「…...
瘦身Spring Boot应用(thinJar)
瘦身Spring Boot应用(thinJar) 简介 我们使用Spring Boot提供的spring-boot-maven-plugin打包Spring Boot应用,可以直接获得一个完整的可运行的jar包,把它上传到服务器上再运行就极其方便。 但是这种方式也不是没有缺点。最大的缺点就是包太大了&…...
备战蓝桥杯---贪心刷题1
话不多说,直接看题: 本质是一个数学题: 我们令xi<0表示反方向传递,易得我们就是求每一个xi的绝对值之和min,我们令平均值为a爸。 易得约束条件: x1-x2a1-a,x2-x3a2-a..... 解得x1x1-0,x2x1-((n-1)*a-a2-...an)。…...
《数据结构学习笔记---第九篇》---循环队列的实现
文章目录 1.循环队列的定义 2.循环队列的判空判满 3.创建队列并初始化 4.入队和出队 5. 返回队尾队首元素 6.释放循环队列 1.循环队列的定义 定义:存储队列元素的表从逻辑上被视为一个环。 我们此次实现的循环队列,采用顺序表 typedef struct {int…...
前端调试工具之Chrome Elements、Network、Sources、TimeLine调试
常用的调试工具有Chrome浏览器的调试工具,火狐浏览器的Firebug插件调试工具,IE的开发人员工具等。它们的功能与使用方法大致相似。Chrome浏览器简洁快速,功能强大这里主要介绍Chrome浏览器的调试工具。 打开 Google Chrome 浏览器,…...
vue 加 websocket 聊天
<template><div style="height: 100%; width: 100%; background-color: #fff"><div class="wrap"><!-- 头部 --><div class="titleBox"><imgsrc="@/assets/image/avatar.png"style="argin: 10p…...
uniapp通过蓝牙传输数据 (ios)
在uni-app中,可以通过uni-ble(uni-app官方提供的蓝牙插件)来实现iOS设备上的蓝牙数据传输。 首先,确保已在uni-app的manifest.json文件中添加uni-ble插件的配置: "permission": { "scope.userLocati…...
docker搭建CI/CD环境配置过程中的常见问题
一、Jenkins 1、pull镜像问题 docker pull jenkins/jenkins:lts Using default tag: latest Trying to pull repository docker.io/library/centos ... Get https://registry-1.docker.io/v2/library/centos/manifests/latest: Get https://auth.docker.io/token?scoperepo…...
实验四 微信小程序智能手机互联网程序设计(微信程序方向)实验报告
请编写一个用户登录界面,提示输入用户名和密码进行登录; 代码 index.wxml <view class"user"> <form bindreset""> <view>用户名:</view><input type"text"name""/>…...
WPF —— 关键帧动画
wpf动画类型 1<类型>Animation这些动画称为from/to/by动画或者叫基本动画,他们会在起始值或者结束值进行动画处理,常用的例如 <DoubleAnimation> 2 <类型>AnimationUsingKeyFrames: 关键帧动画,功能要比from/to这些动画功…...
Taro + vue3 小程序封装标题组件
分为没有跳转页面的title组件和 有跳转页面的title组件 我们可以把这个封装成一个组件 直接上代码 <template><div class"fixed-title-container"><div class"box"><div class"icon" v-if"isShow" click"…...
babyAGI(6)-babyCoder源码阅读2任务描述部分
废话不多说,我们直接看task的prompt 这里需要注意的是,每个openai_call的temperature都不相同,这也是开发程序时需要调整和关注的一点 1. 初始化代码任务agent 作为babycoder的第一个angent,整个prompt编写的十分值得学习 整个p…...
生成式语言模型预训练阶段验证方式与微调阶段验证方式
生成式语言模型,如GPT-3、BERT等,在预训练和微调阶段都需要进行验证以确保模型性能。下面分别介绍这两个阶段的验证方式: 预训练阶段的验证: 预训练阶段通常使用大量未标注的文本数据来训练模型,以学习语言的一般特性。…...
flink on yarn
前言 Apache Flink,作为大数据处理领域的璀璨明星,以其独特的流处理和批处理一体化模型,成为众多企业和开发者的首选。它不仅能够在处理无界数据流时展现出卓越的实时性能,还能在有界数据批处理上达到高效稳定的效果。本文将简要…...
用TOMCAT部署web项目教程
文章目录 引言I 使用webapps文件夹II 利用server.xmlIII 自定义配置文件IV 预备知识4.1项目的一般结构4.2 contex标签4.3 IDE部署4.4 配置Tomcat服务引言 在开发阶段,一般使用IDE如MyEclipse来部署web项目,不要忘记手动部署的三种方式。 I 使用webapps文件夹 将项目文件夹…...
bash例子-source进程替换、alias不生效处理
#1. source 例子, 进程替换source <(echo alias zls"ls") #上一行 中 echo替换为cat,则得到如下行, 好处是 cat不用处理引号转义问题,而echo则必须处理引号转义问题#写一段复杂脚本,且 不处理引号转义问题 &#x…...
rabbitmq死信交换机,死信队列使用
背景 对于核心业务需要保证消息必须正常消费,就必须考虑消费失败的场景,rabbitmq提供了以下三种消费失败处理机制 直接reject,丢弃消息(默认)返回nack,消息重新入队列将失败消息投递到指定的交换机 对于核…...
gitlab备份与恢复
1.1.1 查看系统版本和软件版本 cat /etc/debian_version cat /opt/gitlab/embedded/service/gitlab-rails/VERSION 1.1.2 数据备份 打开/etc/gitlab/gitlab.rb配置文件,查看一个和备份相关的配置项 sudo vim /etc/gitlab/gitlab.rb gitlab_rails[backup_path] &q…...
HBase详解(1)
HBase 简介 概述 HBase是Yahoo!公司开发的后来贡献给了Apache的一套开源的、分布式的、可扩展的、基于Hadoop的非关系型数据库(Non-Relational Database),因此HBase并不支持SQL(几乎所有的非关系型数据库都不支持SQL),而是提供了一套单独的命令和API操…...
深入理解数据结构第二弹——二叉树(2)——堆排序及其时间复杂度
看这篇前请先把我上一篇了解一下:深入理解数据结构第一弹——二叉树(1)——堆-CSDN博客 前言: 相信很多学习数据结构的人,都会遇到一种情况,就是明明最一开始学习就学习了时间复杂度,但是在后期…...
视频汇聚/安防监控/EasyCVR平台播放器EasyPlayer更新:新增【性能面板】
视频汇聚/安防监控/视频存储平台EasyCVR基于云边端架构,可以在复杂的网络环境中快速、灵活部署,平台视频能力丰富,可以提供实时远程视频监控、视频录像、录像回放与存储、告警、语音对讲、云台控制、平台级联、磁盘阵列存储、视频集中存储、云…...
【教程】Flutter 应用混淆
在移动应用开发中,保护应用代码安全至关重要。Flutter 提供了简单易用的混淆工具,帮助开发者在构建 release 版本应用时有效保护代码。本文将介绍如何在 Flutter 应用中使用混淆,并提供了相关的操作步骤和注意事项。 📝 摘要 本…...
韩国网站怎么打开/免费seo教程分享
本文同步发表于 个人博客。 前言 感觉 leetcodeleetcodeleetcode 周赛不花时间,做一做还能保持一下手感,最重要的是能让人在周末早起。于是以后可能就会多打打 leetcodeleetcodeleetcode 了。 周赛273 AK时间: 21min 最终排名: A 5963…...
未来的门户网站/线上推广引流渠道
三维在理解了如何绘制2D元素之后,我们尝试绘制3D元素。 其实多个三角形也能够成四面体,多个长方形也能够成六面体,所以绘制3D元素的时候,只要顶点数量匹配就行了 这里我们尤其注意,我把绘制之前的三个平移和三个旋转单…...
北京网站建设公司电话/网络营销的特点和优势
进程间通信一、管道创建管道父子进程的管道单向通信父子间的双向通信管道Shell中的管道通信匿名管道与命名管道管道特点二、消息队列不足三、共享内存四、信号量五、信号六、Socket创建Socket的系统调用通信方式TCP协议通信的Socket编程模型UDP协议通信的Socket编程模型本地进程…...
wordpress 内页插件/搭建网站
原文出处: 微软互联网开发支持 Visual Studio 是一个强大的调试工具,里面很多隐藏功能少有人问津,但是在特定场景可以节省你很多时间,本文主要介绍一些Visual Studio调试相关的隐藏功能,欢迎大家补充。 运行到光标(R…...
网站排名查询平台/中国seo排行榜
CentOS7——阿里云ESC 安装 Docker 步骤:1. 安装 Docker2. 配置阿里镜像源3. Docker 服务常用命令1. 安装 Docker # 安装必要的一些系统工具 sudo yum install -y yum-utils device-mapper-persistent-data lvm2# 添加软件源信息 sudo yum-config-manager --add-re…...
有域名和主机怎么做网站/护肤品营销策划方案
《大学计算机基础实训教程参考答案(更新)》由会员分享,可在线阅读,更多相关《大学计算机基础实训教程参考答案(更新)(12页珍藏版)》请在人人文库网上搜索。1、第8章 计算机基础知识练习答案一、单项选择题1. A2. B3. A4. A5. A6. C7. C8. C9. D10. A11. …...