XML DOM - XPathResult 对象

XPath 查询的结果。

XPathResult 对象

XPathResult 对象表示一个 XPath 表达式的值。该类型的对象由 Document.evaluate()XPathExpression.evaluate() 返回。XPath 查询可以计算为字符串、数字、布尔值、节点以及节点的列表。XPath 实现可以以几种不同的方式返回节点的列表,因此,这个对象为获取一个 XPath 查询的实际结果而定义了略为复杂的 API。

要使用一个 XPathResult,首先检查 resultType 属性。它将保存一个 XPathResult 常量。这个属性的值告诉你需要使用哪个属性和方法来确定结果值。调用不是为当前的 resultType 定义的方法或者读取不是为它定义的属性会导致异常。

IE 不支持 XPathResult API。要在 IE 中执行 XPath 查询,参阅 Node.selectNodes()Node.selectSingleNode()

XPathResult 对象的常量

如下常量定义了一个 XPath 查询可能返回的类型。XPathResult 对象的 resultType 属性保存了这些值中的一个,用来指定对象保存何种结果。这些常量与 Document.evaluate() 和 XPathExpression.evaluate() 一起使用,用来指定期待的结果类型。

这些常量及其含义如下:

ANY_TYPE

把这个值传递给 Document.evaluate() 或 XPathExpression.evaluate() 来指定可接受的结果类型。属性 resultType 并不设置这个值。

NUMBER_TYPE

numbervalue 保存结果。

STRING_TYPE

stringvalue 保存结果。

BOOLEAN_TYPE

booleanValue 保存结果。

UNORDERED_NODE_ITERATOR_TYPE

这个结果是节点的无序集合,可以通过重复调用 iterateNext() 直到返回 null 来依次访问。在此迭代过程中,文档必须不被修改。

ORDERED_NODE_ITERATOR_TYPE

结果是节点的列表,按照文档中的属性排列,可以通过重复调用 iterateNext() 直到返回 null 来依次访问。在此迭代过程中,文档必须不被修改。

UNORDERED_NODE_SNAPSHOT_TYPE

结果是一个随机访问的节点列表。snapshotLength 属性指定了列表的长度,并且 snapshotItem() 方法返回指定下标的节点。节点可能和它们出现在文档中的顺序不一样。既然这种结果是一个“快照”,因此即便文档发生变化,它也有效。

ORDERED_NODE_SNAPSHOT_TYPE

这个结果是一个随机访问的节点列表,就像 UNORDERED_NODE_SNAPSHOT_TYPE,只不过这个列表是按照文档中的顺序排列的。

ANY_UNORDERED_NODE_TYPE

singleNodeValue 属性引用和查询匹配的一个节点,如果没有匹配的节点则为 null。如果有多个节点和查询匹配,singleNodeValue 可能是任何一个匹配节点。

FIRST_ORDERED_NODE_TYPE

singleNodeValue 保存了文档中的第一个和查询匹配的节点,如果没有匹配的节点,则为 null。

XPathResult 对象的实例属性

这里的很多属性只有当 resultType 保存了一个特定的值时才有效。访问并非为当前 resultType 定义的属性会导致异常。

booleanValue

当 resultType 为 BOOLEAN_TYPE 时,保存结果值。

invalidIteratorState

如果 resultType 是 ITERATOR_TYPE 常量中的一个并且文档已经修改,则为 true;它使迭代无效,因为结果已经返回。

numberValue

当 resultType 为 NUMBER_TYPE 时,保存结果值。

resultType

使用 XPath 查询返回何种结果。它的值是前面列出等常量之一。这个属性的值告诉你可以使用那些其他属性和方法。

singleNodeValue

当 resultType 为 XPathResult.ANY_UNORDERED_NODE_TYPE 或 XPathResult.FIRST_UNORDERED_NODE_TYPE 时,保存结果值。

snapshotLength

当 resultType 为 UNORDERED_NODE_SNAPSHOT_TYPE 或 ORDERED_NODE_ITERATOR_TYPE 时,指定返回的节点数。和 snapshotItem() 联合使用这一属性。

stringValue

当 resultType 为 STRING_TYPE 时,保存结果值。

XPathResult 对象的方法

方法 描述
iterateNext() 如果 resultType 是 UNORDERED_NODE_ITERATOR_TYPE 或 ORDERED_NODE_ITERATOR_TYPE,使用这个一方法。
snapshotItem() 返回结果节点列表中指定下标的节点。这个方法只有在 resultType 是 UNORDERED_NODE_SNAPSHOT_TYPE 或 ORDERED_NODE_SNAPSHOT_TYPE 的时候才能使用。snapshotLength 属性和这个方法一起使用。

参阅

Document.evaluate()XPathExpression.evaluate()