深入学习 XML 解析器及 DOM 操作技术
![深入学习 XML 解析器及 DOM 操作技术](https://static001.geekbang.org/infoq/d1/d173bd52a9a4d628d7eadd05fd741a81.png)
所有主要的浏览器都内置了一个 XML 解析器,用于访问和操作 XML
XML 解析器
在访问 XML 文档之前,必须将其加载到 XML DOM 对象中
所有现代浏览器都有一个内置的 XML 解析器,可以将文本转换为 XML DOM 对象
解析文本字符串
以下示例将一个文本字符串解析为 XML DOM 对象,并使用 JavaScript 从中提取信息:
示例
示例解释
定义了一个文本字符串:
创建了一个 XML DOM 解析器:
解析器使用文本字符串创建一个新的 XML DOM 对象:
XMLHttpRequest 对象
responseText 属性以字符串形式返回响应。
responseXML 属性以 XML DOM 对象的形式返回响应。
如果要将响应作为 XML DOM 对象使用,可以使用 responseXML 属性。
示例
XML DOM
DOM 是什么?
文档对象模型(DOM)定义了一种标准,用于访问和操作文档
HTML DOM 定义了一种访问和操作 HTML 文档的标准方式。它将 HTML 文档呈现为一棵树结构。
XML DOM 定义了一种访问和操作 XML 文档的标准方式。它将 XML 文档呈现为一棵树结构。
了解 DOM 对于任何与 HTML 或 XML 相关的工作都是必要的。
HTML DOM
所有 HTML 元素都可以通过 HTML DOM 访问。
以下示例更改具有 id="demo"的 HTML 元素的值:
示例
XML DOM
所有 XML 元素都可以通过 XML DOM 访问
以下代码检索 XML 文档中第一个 <title>
元素的文本值:
示例
XML DOM 是获取、更改、添加和删除 XML 元素的标准方式。
以下示例将一个文本字符串加载到 XML DOM 对象中,并使用 JavaScript 从中提取信息:
示例
XML 和 XPath
什么是 XPath?
XPath 是 XSLT 标准中的一个主要元素。它可用于浏览 XML 文档中的元素和属性。
![](https://static001.geekbang.org/infoq/5b/5bda7cac5a5c674a9c8a107bd467ae5b.gif)
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 文档:
在下表中,我们列出了一些 XPath 表达式及其结果:
XML 和 XQuery
什么是 XQuery?
XQuery 是 XML 的查询语言,类似于 SQL 对数据库的作用。XQuery 的设计目标是查询 XML 数据。
XQuery 示例
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 示例
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 属性:
在 XPointer 中,我们可以链接到文档中具有特定 id 的元素:
这里,我们使用 id 值 "Rottweiler"。
这种链接方法可用于指向文档中的特定部分。
XML 验证器
使用我们的 XML 验证器来检查您的 XML 语法。
格式良好的 XML 文档
具有正确语法的 XML 文档称为“格式良好”。以下是一份示例:
XML 的语法规则包括:
XML 文档必须有根元素
XML 元素必须有关闭标签
XML 标签区分大小写
XML 元素必须正确嵌套
XML 属性值必须用引号括起来
XML 错误将阻止您
XML 文档中的错误将阻止您的 XML 应用程序
HTML 浏览器允许显示带有错误的 HTML 文档,但对于 XML,不允许存在错误。
检查 XML 语法
为了帮助您检查 XML 语法,我们创建了一个 XML 验证器。
尝试检查正确的 XML
尝试检查不正确的 XML
有效的 XML 文档
“格式良好”的 XML 文档与“有效”的 XML 文档不同。“有效”的 XML 文档必须是格式良好的,并符合文档类型定义(DTD 或 XML 模式)。
文档类型定义定义了 XML 文档的规则以及合法的元素和属性。
XML DTD
具有正确语法的 XML 文档称为“格式良好”。
通过 DTD 验证的 XML 文档既是“格式良好”又是“有效”的。
什么是 DTD?
DTD 代表文档类型定义。
DTD 定义了 XML 文档的结构以及合法的元素和属性。
有效的 XML 文档
一个“有效”的 XML 文档既是“格式良好”的,也符合 DTD 的规则:
上面的 DOCTYPE 声明包含对 DTD 文件的引用。DTD 文件的内容如下所示,并进行了解释。
XML DTD
DTD 的目的是定义 XML 文档的结构以及合法的元素和属性
上述 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 声明还可用于定义文档中使用的特殊字符或字符串
例子
提示:实体由三部分组成:以“&”开始,然后是实体名称,最后以分号结束
何时使用 DTD?
使用 DTD,独立的人群可以同意使用标准的 DTD 进行数据交换
使用 DTD,您可以验证从外部世界接收到的数据是否有效
您还可以使用 DTD 验证自己的数据
何时不使用 DTD?
XML 不需要 DTD
当您尝试使用 XML 进行实验,或者当您处理小型 XML 文件时,创建 DTD 可能是浪费时间的
如果您开发应用程序,请等到规范稳定后再添加 DTD。否则,由于验证错误,您的软件可能会停止工作
XML Schema
具有正确语法的 XML 文档称为“格式良好”
通过 XML Schema 验证的 XML 文档既是“格式良好”又是“有效”的
XML Schema
XML Schema 是 DTD 的基于 XML 的替代方案
上述 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
例子解释
代码的第一个块创建 Microsoft XML 解析器(XMLDOM)的实例,并将 XML 文件加载到内存中。
代码的第二个块创建解析器的另一个实例,并将 XSL 文件加载到内存中。
代码的最后一行使用 XSL 文档转换 XML 文档,并将结果作为 XHTML 发送到浏览器。
最后
为了方便其他设备和平台的小伙伴观看往期文章:
微信公众号搜索:Let us Coding
,关注后即可获取最新文章推送
看完如果觉得有帮助,欢迎点赞、收藏、关注
版权声明: 本文为 InfoQ 作者【小万哥】的原创文章。
原文链接:【http://xie.infoq.cn/article/41abf8c2bd0070329340468d2】。文章转载请联系作者。
评论