我在学习javascript用xpath解析html文档。
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title></title>
</head>
<body>
<ul>
<li>th1 node</li>
<li>th2 node</li>
<li>th3 node</li>
<li>th4 node</li>
<li>th5 node</li>
</ul>
<script charset="utf-8" type="text/javascript" >
var documentNode=document.body;
const iterator1 = document.evaluate('//li', documentNode, null, XPathResult.UNORDERED_NODE_ITERATOR_TYPE, null);
try {
let thisNode = iterator1.iterateNext();
while (thisNode) {
console.log(thisNode.textContent);
thisNode = iterator1.iterateNext();
}
}
catch(e) {
console.log(`Error: Document tree modified during iteration ${e}`);
}
const iterator2 = document.evaluate('//p', documentNode, null, XPathResult.UNORDERED_NODE_ITERATOR_TYPE, null);
try {
let thisNode = iterator2.iterateNext();
while (thisNode) {
console.log(thisNode.textContent);
thisNode = iterator2.iterateNext();
}
}
catch(e) {
console.log(`Error: Document tree modified during iteration ${e}`);
}
</script>
</body>
</html>
上面的html文件,
const iterator1 = document.evaluate('//li', documentNode, null, XPathResult.UNORDERED_NODE_ITERATOR_TYPE, null);
可以得到正确的结果,这个很正常。
现在换用
const iterator2 = document.evaluate('//p', documentNode, null, XPathResult.UNORDERED_NODE_ITERATOR_TYPE, null);
节点p根本就不存在文档中,
try {
let thisNode = iterator2.iterateNext();
while (thisNode) {
console.log(thisNode.textContent);
thisNode = iterator2.iterateNext();
}
}
catch(e) {
console.log(`Error: Document tree modified during iteration ${e}`);
这里的try catch中的console.log 没有error信息输出。
Error: Document tree modified during iteration
请问,原因在哪里?
没有找到p,应该是返回了Null,不满足循环,while里面的Null.属性也不会执行就不抱错呗