使用Javascript XPath对象时发生节点不可用异常的解决方法

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更安全一些,因为结果中存放了节点集合的快照,不会受页面动态变化的影响。