xpath正在检查DOM或XML?

时间:2014-09-15 21:45:12

标签: xml dom xpath protocols

我对xpath,DOM和实际的XML有点困惑。

来自w3.org

  

XPath是一种用于处理XML文档部分的语言

来自w3schools

  

XPath用于浏览XML中的元素和属性   文档。

这一切似乎都很好。然而,在xpath中存在text()节点,而文本节点无疑是DOM协议的一部分。那么xpath实际上是在检查DOM吗?

3 个答案:

答案 0 :(得分:1)

XPath和DOM都是使用 XML文档结构的方式。 W3C已将此结构正式化为XML Infoset,表示XML文档中包含的信息,与该文档当前的表示方式无关。

XML及其所有<>是该Infoset的主要表示形式,但其他可能(例如Fast Infoset)。但是在处理XML文档时,您对<出现的次数不感兴趣,您对标记所代表的结构感兴趣。

XPath和DOM都包含自己的XML文档模型,它超越了Infoset(以精心指定的方式),为遍历和操作文档提供了更高级别的抽象。 DOM的“文本节点”类型和XPath的text()节点测试的相似性简单地说明了这是一个在处理XML文档时有用的抽象。 Infoset将每个角色视为一个独特的“角色信息项”,但几乎每个处理器都希望将连续的角色组合成一个字符串。

DOM将其模型定义为一系列具有严格定义接口的对象,用于面向对象编程;它实际上在某种程度上独立于XML和XML Infoset,它的起源和当前的开发重点都是与用HTML编写的Web文档交互的模型。 XPath使用的模型现在已经拆分为自己的规范XQuery and XPath Data Model;它是以XML Infoset显式构建的,允许结构化查询。

答案 1 :(得分:1)

XPath定义了一个数据模型,它是XML的树形表示,XPath表达式的语义是根据此数据模型定义的。在XPath 1.0中,该模型是XPath规范的一部分;在2.0中,它是一个名为XDM的单独规范。它与DOM类似但不完全相同;例如,DOM命名空间可作为属性节点访问,但在XDM中,它们由命名空间节点表示。 DOM允许您表示与任何XML文档不对应的内容(例如,未绑定到任何名称空间URI的名称中的名称空间前缀),但XDM更严格。

许多XPath实现针对树模型(例如DOM,JDOM或XOM)工作,这些树模型与次要细节中的XDM不同。这样的实现实际上必须解决当遇到XDM不允许的事情时要做什么:例如,当它遇到具有相邻或零长度文本节点的DOM时会发生什么。

所以你认为XPath语义与树的导航相关是正确的,但是这个树虽然类似于DOM,但实际上并不是DOM。

答案 2 :(得分:0)

当你说&#34;实际的XML&#34;时,你的意思是字符序列,而不是解析字符序列后内存中的树结构吗?

XPath对已解析的XML(或HTML)文档的树结构进行操作。这就是你引用的句子在他们说&#34; XML文档时的含义。&#34;

DOM(文档对象模型)是一种树结构,用于表示内存中已解析的XML文档的结构。所以是的,XPath在DOM上运行。 XPath不对未解析的字符序列进行操作。

Firebug中的HTML选项卡将DOM显示为可折叠的树结构。