Mozilla对XPath的支持符合DOM Level 3 XPath标准,主要使用两个对象XPathEvaluator和XPathResult,调用XPathEvaluator的evaluate()函数时可以指定XPathResult的结果类型。
我一般都是选用XPathResult.ORDERED_NODE_ITERATOR_TYPE类型,但是在某些情况下会在调用XPathResult的interateNext()出现异常,表明所找的节点不可用。经过分析和测试,发现HTML页面上的DOM节点会自动变化的,结果当调用iterateNext()函数时,某个节点可能已经不在了。
所以,不应该一律使用XPathResult.ORDERED_NODE_ITERATOR_TYPE类型,XPathResult.ORDERED_NODE_SNAPSHOT_TYPE更安全一些,因为结果中存放了节点集合的快照,不会受页面动态变化的影响。