深入学习 XML 解析器及 DOM 操作技术

这篇具有很好参考价值的文章主要介绍了深入学习 XML 解析器及 DOM 操作技术。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

所有主要的浏览器都内置了一个XML解析器,用于访问和操作XML

XML 解析器

在访问XML文档之前,必须将其加载到XML DOM对象中

所有现代浏览器都有一个内置的XML解析器,可以将文本转换为XML DOM对象

解析文本字符串

以下示例将一个文本字符串解析为XML DOM对象,并使用JavaScript从中提取信息:

示例

<html>  
<body>  
<p id="demo"></p>  
<script>  
var text, parser, xmlDoc;  
text = "<bookstore><book>" +  
    "<title>Everyday Italian</title>" +  
    "<author>Giada De Laurentiis</author>" +  
    "<year>2005</year>" +  
    "</book></bookstore>";  
parser = new DOMParser();  
xmlDoc = parser.parseFromString(text, "text/xml");  
document.getElementById("demo").innerHTML =  
    xmlDoc.getElementsByTagName("title")[0].childNodes[0].nodeValue;  
</script>  
</body>  
</html>

示例解释

定义了一个文本字符串:

text = "<bookstore><book>" +  
    "<title>Everyday Italian</title>" +  
    "<author>Giada De Laurentiis</author>" +  
    "<year>2005</year>" +  
    "</book></bookstore>";

创建了一个XML DOM解析器:

parser = new DOMParser();

解析器使用文本字符串创建一个新的XML DOM对象:

xmlDoc = parser.parseFromString(text, "text/xml");

XMLHttpRequest 对象

responseText 属性以字符串形式返回响应。

responseXML 属性以XML DOM对象的形式返回响应。

如果要将响应作为XML DOM对象使用,可以使用responseXML属性。

示例

xmlDoc = xmlhttp.responseXML;  
txt = "";  
x = xmlDoc.getElementsByTagName("ARTIST");  
for (i = 0; i < x.length; i++) {  
    txt += x[i].childNodes[0].nodeValue + "<br>";  
}  
document.getElementById("demo").innerHTML = txt;

XML DOM

DOM 是什么?

文档对象模型(DOM)定义了一种标准,用于访问和操作文档

HTML DOM 定义了一种访问和操作HTML文档的标准方式。它将HTML文档呈现为一棵树结构。

XML DOM 定义了一种访问和操作XML文档的标准方式。它将XML文档呈现为一棵树结构。

了解DOM对于任何与HTML或XML相关的工作都是必要的。

HTML DOM

所有HTML元素都可以通过HTML DOM访问。

以下示例更改具有id="demo"的HTML元素的值:

示例

<h1 id="demo">This is a Heading</h1>

<button type="button"
onclick="document.getElementById('demo').innerHTML = 'Hello World!'">Click Me!
</button>

XML DOM

所有XML元素都可以通过XML DOM访问

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

  <book category="cooking">
    <title lang="en">Everyday Italian</title>
    <author>Giada De Laurentiis</author>
    <year>2005</year>
    <price>30.00</price>
  </book>

  <book category="children">
    <title lang="en">Harry Potter</title>
    <author>J K. Rowling</author>
    <year>2005</year>
    <price>29.99</price>
  </book>

</bookstore>

以下代码检索XML文档中第一个 <title> 元素的文本值:

示例

txt = xmlDoc.getElementsByTagName("title")[0].childNodes[0].nodeValue;

XML DOM 是获取、更改、添加和删除XML元素的标准方式。

以下示例将一个文本字符串加载到XML DOM对象中,并使用JavaScript从中提取信息:

示例

<html>
<body>

<p id="demo"></p>

<script>
var text, parser, xmlDoc;

text = "<bookstore><book>" +
"<title>Everyday Italian</title>" +
"<author>Giada De Laurentiis</author>" +
"<year>2005</year>" +
"</book></bookstore>";

parser = new DOMParser();
xmlDoc = parser.parseFromString(text, "text/xml");

document.getElementById("demo").innerHTML =
xmlDoc.getElementsByTagName("title")[0].childNodes[0].nodeValue;
</script>

</body>
</html>

XML 和 XPath

什么是 XPath?

XPath 是 XSLT 标准中的一个主要元素。它可用于浏览 XML 文档中的元素和属性。

  • XPath 是定义 XML 文档部分的语法。
  • XPath 使用路径表达式在 XML 文档中导航。
  • XPath 包含标准函数库。
  • XPath 是 XSLT 和 XQuery 中的主要元素

XPath 路径表达式

XPath 使用路径表达式选择 XML 文档中的节点或节点集。这些路径表达式类似于在传统计算机文件系统中使用的表达式。

XPath 表达式可用于 JavaScript、Java、XML Schema、PHP、Python、C 和 C++ 等许多其他语言。

XPath 用于 XSLT

XPath 是 XSLT 标准中的一个主要元素。具备 XPath 知识将使您能够充分利用 XSL。

XPath 示例

我们将使用以下 XML 文档:

<?xml version="1.0" encoding="UTF-8"?>
<bookstore>
  <book category="cooking">
    <title lang="en">Everyday Italian</title>
    <author>Giada De Laurentiis</author>
    <year>2005</year>
    <price>30.00</price>
  </book>
  <!-- 其他书籍内容省略 -->
</bookstore>

在下表中,我们列出了一些 XPath 表达式及其结果:

XPath 表达式 结果
/bookstore/book[1] 选择 bookstore 元素的第一个子元素 book 元素
/bookstore/book[last()] 选择 bookstore 元素的最后一个子元素 book 元素
/bookstore/book[last()-1] 选择 bookstore 元素的倒数第二个子元素 book 元素
/bookstore/book[position()<3] 选择 bookstore 元素的前两个子元素 book 元素
//title[@lang] 选择所有具有名为 lang 的属性的 title 元素
//title[@lang='en'] 选择所有具有值为 "en" 的 "lang" 属性的 title 元素
/bookstore/book[price>35.00] 选择 bookstore 元素中所有具有价格大于 35.00 的 book 元素
/bookstore/book[price>35.00]/title 选择 bookstore 元素中所有具有价格大于 35.00 的 book 元素的 title 元素

XML 和 XQuery

什么是 XQuery?

XQuery 是 XML 的查询语言,类似于 SQL 对数据库的作用。XQuery 的设计目标是查询 XML 数据。

XQuery 示例

for $x in doc("books.xml")/bookstore/book
where $x/price>30
order by $x/title
return $x/title
  • XQuery 是一种从 XML 文档中查找和提取元素和属性的语言。
  • 示例问题:"从存储在 cd_catalog.xml 中的 CD 集合中选择所有价格低于 $10 的 CD 记录"

XQuery 和 XPath

XQuery 1.0 和 XPath 2.0 共享相同的数据模型,并支持相同的函数和运算符。如果您已经学习过 XPath,那么理解 XQuery 将没有问题。

XQuery 使用示例

XQuery 可以用于:

  • 提取用于 Web 服务的信息
  • 生成摘要报告
  • 将 XML 数据转换为 XHTML
  • 在 Web 文档中搜索相关信息

XML、XLink 和 XPointer

XLink

  • XLink 用于在 XML 文档中创建超链接。
  • 在 XML 文档中,没有浏览器支持 XLink。但是 XLink 在其他 XML 语言中使用。
  • XLink 语法允许使用任何元素名称作为链接元素。

XLink 示例

<?xml version="1.0" encoding="UTF-8"?>
  • xlink:type="simple" 创建一个简单的 "类似 HTML" 链接。
  • xlink:href 属性指定要链接到的 URL。

XLink 示例解释

  • 在文档顶部声明了 XLink 命名空间(xmlns:xlink="http://www.w3.org/1999/xlink")。
  • xlink:type="simple" 创建一个简单的 "类似 HTML" 链接。
  • xlink:href 属性指定链接到的 URL(在这种情况下是图像)。
  • xlink:show="new" 指定链接应在新窗口中打开。

XLink - 进一步了解

  • 在上面的示例中,我们演示了简单的 XLink。
  • 当访问远程位置作为资源时,XLink 变得更有趣。

XPointer

  • XPointer 允许链接指向 XML 文档的特定部分。
  • 使用 XPath 表达式在 XML 文档中导航

XPointer 示例

在 XLink 与 XPointer 结合使用的示例中,我们链接到另一个文档的特定部分。

首先,查看目标 XML 文档,该文档在每个元素上使用 id 属性:

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

<dogbreeds>

<dog breed="Rottweiler" id="Rottweiler">
  <picture url="https://dog.com/rottweiler.gif" />
  <history>The Rottweiler's ancestors were probably Roman drover dogs.....</history>
  <temperament>Confident, bold, alert and imposing, the Rottweiler is a popular choice for its ability to protect....</temperament>
</dog>

<dog breed="FCRetriever" id="FCRetriever">
  <picture url="https://dog.com/fcretriever.gif" />
  <history>One of the earliest uses of retrieving dogs was to help fishermen retrieve fish from the water....</history>
  <temperament>The flat-coated retriever is a sweet, exuberant, lively dog that loves to play and retrieve....</temperament>
</dog>

</dogbreeds>

在 XPointer 中,我们可以链接到文档中具有特定 id 的元素:

<fact xlink:type="simple" xlink:href="https://dog.com/dogbreeds.xml#Rottweiler">Fact about Rottweiler</fact>

这里,我们使用 id 值 "Rottweiler"。

这种链接方法可用于指向文档中的特定部分。

XML验证器

使用我们的XML验证器来检查您的XML语法。

格式良好的XML文档

具有正确语法的XML文档称为“格式良好”。以下是一份示例:

<?xml version="1.0" encoding="UTF-8"?>
<note>
  <to>Tove</to>
  <from>Jani</from>
  <heading>Reminder</heading>
  <body>Don't forget me this weekend!</body>
</note>

XML的语法规则包括:

  • XML文档必须有根元素
  • XML元素必须有关闭标签
  • XML标签区分大小写
  • XML元素必须正确嵌套
  • XML属性值必须用引号括起来

XML错误将阻止您

XML文档中的错误将阻止您的XML应用程序

HTML浏览器允许显示带有错误的HTML文档,但对于XML,不允许存在错误。

检查XML语法

为了帮助您检查XML语法,我们创建了一个XML验证器。

尝试检查正确的XML

<?xml version="1.0" encoding="UTF-8"?>
<note>
  <to>Tove</to>
  <from>Jani</from>
  <heading>Reminder</heading>
  <body>Don't forget me this weekend!</body>
</note>

尝试检查不正确的XML

<?xml version="1.0" encoding="UTF-8"?>
<note>
  <to>Tove</to>
  <from>Jani</from>
  <heading>Reminder</pheading>
  <body>Don't forget me this weekend!</body>
</note>

有效的XML文档

“格式良好”的XML文档与“有效”的XML文档不同。“有效”的XML文档必须是格式良好的,并符合文档类型定义(DTD或XML模式)。

文档类型定义定义了XML文档的规则以及合法的元素和属性。

XML DTD

具有正确语法的XML文档称为“格式良好”。

通过DTD验证的XML文档既是“格式良好”又是“有效”的。

什么是DTD?

DTD代表文档类型定义。

DTD定义了XML文档的结构以及合法的元素和属性。

有效的XML文档

一个“有效”的XML文档既是“格式良好”的,也符合DTD的规则:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE note SYSTEM "Note.dtd">
<note>
  <to>Tove</to>
  <from>Jani</from>
  <heading>Reminder</heading>
  <body>Don't forget me this weekend!</body>
</note>

上面的DOCTYPE声明包含对DTD文件的引用。DTD文件的内容如下所示,并进行了解释。

XML DTD

DTD的目的是定义XML文档的结构以及合法的元素和属性

<!DOCTYPE note
[
  <!ELEMENT note (to,from,heading,body)>
  <!ELEMENT to (#PCDATA)>
  <!ELEMENT from (#PCDATA)>
  <!ELEMENT heading (#PCDATA)>
  <!ELEMENT body (#PCDATA)>
]>

上述DTD的解释如下

  • <!DOCTYPE note - 定义文档的根元素为note
  • <!ELEMENT note - 定义note元素必须包含元素:“to, from, heading, body”
  • <!ELEMENT to - 定义to元素的类型为“#PCDATA”
  • <!ELEMENT from - 定义from元素的类型为“#PCDATA”
  • <!ELEMENT heading - 定义heading元素的类型为“#PCDATA”
  • <!ELEMENT body - 定义body元素的类型为“#PCDATA”

提示:#PCDATA表示可解析的字符数据

使用DTD进行实体声明

DOCTYPE声明还可用于定义文档中使用的特殊字符或字符串

例子

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

<!DOCTYPE note [
  <!ENTITY nbsp "&#xA0;">
  <!ENTITY writer "Writer: Donald Duck.">
  <!ENTITY copyright "Copyright: W3Schools.">
]>

<note>
  <to>Tove</to>
  <from>Jani</from>
  <heading>Reminder</heading>
  <body>Don't forget me this weekend!</body>
  <footer>&writer;&nbsp;&copyright;</footer>
</note>

提示:实体由三部分组成:以“&”开始,然后是实体名称,最后以分号结束

何时使用DTD?

使用DTD,独立的人群可以同意使用标准的DTD进行数据交换

使用DTD,您可以验证从外部世界接收到的数据是否有效

您还可以使用DTD验证自己的数据

何时不使用DTD?

XML不需要DTD

当您尝试使用XML进行实验,或者当您处理小型XML文件时,创建DTD可能是浪费时间的

如果您开发应用程序,请等到规范稳定后再添加DTD。否则,由于验证错误,您的软件可能会停止工作

XML Schema

具有正确语法的XML文档称为“格式良好”

通过XML Schema验证的XML文档既是“格式良好”又是“有效”的

XML Schema

XML Schema是DTD的基于XML的替代方案

<xs:element name="note">
  <xs:complexType>
    <xs:sequence>
      <xs:element name="to" type="xs:string"/>
      <xs:element name="from" type="xs:string"/>
      <xs:element name="heading" type="xs:string"/>
      <xs:element name="body" type="xs:string"/>
    </xs:sequence>
  </xs:complexType>
</xs:element>

上述Schema的解释如下

  • <xs:element name="note"> 定义名为“note”的元素
  • <xs:complexType> “note”元素是一个复杂类型
  • <xs:sequence> 复杂类型是一系列元素
  • <xs:element name="to" type="xs:string"> “to”元素的类型为字符串(文本)
  • <xs:element name="from" type="xs:string"> “from”元素的类型为字符串
  • <xs:element name="heading" type="xs:string"> “heading”元素的类型为字符串
  • <xs:element name="body" type="xs:string"> “body”元素的类型为字符串

XML Schema比DTD更强大

  • XML Schema是用XML编写的
  • XML Schema可扩展以添加内容
  • XML Schema支持数据类型
  • XML Schema支持命名空间

为什么使用XML Schema?

使用XML Schema,您的XML文件可以携带其自身格式的描述。

使用XML Schema,独立的人群可以就数据交换达成标准协议。

使用XML Schema,您可以验证数据。

XML Schema支持数据类型

XML Schema的最大优势之一是支持数据类型

  • 更容易描述文档内容
  • 更容易定义对数据的限制
  • 更容易验证数据的正确性
  • 更容易在不同数据类型之间转换数据

XML Schema使用XML语法

XML Schema的另一个重要优势是它们是用XML编写的

  • 您不必学习一种新语言
  • 您可以使用XML DOM操作Schema
  • 您可以使用XSLT转换Schema

在服务器上使用XSLT转换XML

此ASP将服务器上的XML文件转换为XHTML

<%
'加载XML
set xml = Server.CreateObject("Microsoft.XMLDOM")
xml.async = false
xml.load(Server.MapPath("simple.xml"))

'加载XSL
set xsl = Server.CreateObject("Microsoft.XMLDOM")
xsl.async = false
xsl.load(Server.MapPath("simple.xsl"))

'转换文件
Response.Write(xml.transformNode(xsl))
%>

例子解释

  • 代码的第一个块创建Microsoft XML解析器(XMLDOM)的实例,并将XML文件加载到内存中。
  • 代码的第二个块创建解析器的另一个实例,并将XSL文件加载到内存中。
  • 代码的最后一行使用XSL文档转换XML文档,并将结果作为XHTML发送到浏览器。

最后

为了方便其他设备和平台的小伙伴观看往期文章:

微信公众号搜索:Let us Coding,关注后即可获取最新文章推送

看完如果觉得有帮助,欢迎点赞、收藏、关注文章来源地址https://www.toymoban.com/news/detail-840858.html

到了这里,关于深入学习 XML 解析器及 DOM 操作技术的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【XML技术】web杂谈(3)之深入理解什么是XML、XML的语法详解

    什么是 XML,XML的特征,XML的基本语法及应用,应用程序接口(DOMSAX),XML的文档的显示,深入了解XML技术。 原创于:CSDN博主-《拄杖盲学轻声码》,更多内容可去其主页关注下哈,不胜感激 Web 上的文档组织包含了服务器端文档的存储方式、客户端页面的浏览方式以及传输方

    2024年02月11日
    浏览(29)
  • 【JAVA】XML及其解析技术、XML检索技术、设计模式

    XML(Extensible Markup Language)是可扩展标记语言的缩写,它是一种数据表示格式,可以描述复杂的数据结构,常用于传输和存储数据 作用: 用于进行存储数据和传输数据 作为软件的配置文件 第一行是文档声明 ? xml version =\\\"1.0\\\" encoding =\\\"UTF-8\\\" ? version:XML默认的版本号码、该属性是必

    2024年02月11日
    浏览(31)
  • 探索 DTD 在 XML 中的作用及解析:深入理解文档类型定义

    DTD 是文档类型定义(Document Type Definition)的缩写。DTD 定义了 XML 文档的结构以及合法的元素和属性。 通过使用 DTD,独立的团体可以就数据交换的标准 DTD 达成一致。 应用程序可以使用 DTD 来验证 XML 数据的有效性。 如果 DTD 在 XML 文件内声明,它必须包裹在 DOCTYPE 定义内:

    2024年04月26日
    浏览(23)
  • DOM(文档对象模型):理解网页结构与内容操作的关键技术

    DOM(文档对象模型)定义了一种访问和操作文档的标准。它是一个平台和语言无关的接口,允许程序和脚本动态访问和更新文档的内容、结构和样式。HTML DOM用于操作HTML文档,而XML DOM用于操作XML文档。 HTML DOM示例 XML DOM示例 DOM的编程接口由一组标准属性和方法定义。属性通常

    2024年04月08日
    浏览(30)
  • JavaSE XML解析技术的使用详解

    XML的数据作用是什么? 最终需要怎样处理 ? 作用: 存储数据、做配置信息、进行数据传输。 最终需要被程序进行读取,解析里面的信息。 XML解析就是使用程序读取XML中的数据 : 有两种解析方式 : SAX解析 DOM解析( 我们重点学习DOM解析 ) DOM常见的解析工具 : 名称 说明 JAXP SUN公司提

    2024年02月19日
    浏览(25)
  • 深入解析MyBatisPlus:手动编写mapper和mapper.xml层实现IPage<YourEntity>返回类型

    在使用MyBatisPlus进行数据访问时,通常会涉及到编写mapper接口和mapper.xml文件来定义CRUD操作。在一些场景中,我们需要进行分页查询,并返回一个包含分页信息的数据集合。在这种情况下,我们可以使用MyBatisPlus提供的IPage接口来实现分页查询,并将其返回类型设置为 IPageYour

    2024年02月16日
    浏览(33)
  • python 之xml 使用原生xml.dom

    一、xml操作 使用xml进行创建 二、获取值、修改值 直接获取数据 通过父节点定义子节点 并获取值 重新赋值 添加子节点 三、将一个xml文档,插入另一文档中(将一个节点值插入另一个节点) 将一个xml文档某个元素插入另一个文档,插入另一文档中 将另个文档中的节点,插入指

    2024年02月07日
    浏览(26)
  • TDengine 深入解析缓存技术

            TDengine是一款高性能的物联网大数据平台。为了高效处理时序数据,TDengine中大量用到了缓存技术,自己实现了哈希表、缓存池等技术。本文会为大家讲解TDengine中用到的这些缓存技术。         首先会介绍一下什么是缓存,常用的缓存技术,最后重点分享TDe

    2024年02月07日
    浏览(36)
  • H3C端口镜像技术深入解析

    端口镜像是将指定端口(源端口)、VLAN(源VLAN)或CPU(源CPU)的报文复制一份到其它端口(目的端口),目的端口会与数据监测设备相连,用户利用这些数据监测设备来分析复制到目的端口的报文,进行网络监控和故障排除。 端口镜像的基本概念 为了更好地理解后面的内容

    2024年02月05日
    浏览(29)
  • 深入解析人脸识别技术:原理、应用与未来发展

    人脸识别技术在当今社会中具有重要性和广泛的应用领域。它不仅在商业和安全领域发挥着关键作用,还为各行各业带来了许多创新和便利。 在商业领域,人脸识别技术被用于市场调研和客户分析,帮助企业了解消费者的偏好和行为,从而改进产品和服务,提高客户满意度和

    2024年02月14日
    浏览(36)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包