浏览器对XPath的支持
DOM Level 3 XPath
判定浏览器是否支持
let support = document.implementation.hasFeature("XPath","3.0")
此规范定义了很多类型,其中最重要的两个是XPathEvaluator
和XPathResult
XPathEvaluator
用于在特定上下文中求值XPath表达式。
- createExpression(expression,nsresolver),用于根据XPath表达式及相应的命名空间计算得到一个XPathExpression。
- createNSResolver(node),基于node的命名空间创建新的XPathNSResolver对象。当对使用名称空间的XML文档求值时,需要XPathNSResolver对象。
- evaluate(expression, context,nsresolver,type,result),根据给定的上下文和命名空间对XPath进行求值。其他参数表示如何返回结果。
使用最频繁的是evaluate()
。这个方法接收五个参数:XPath表达式、上下问节点、命名空间解析器、返回的结果类型和XPathResult对象。
如果结果是节点迭代器,无论有序还是无序,都必须使用iterateNext()
方法获取结果中每个匹配的节点。
如果指定了快照结果类型,都必须使用snapshotItem()
方法和snapshotLength
属性获取结果
let result = xmldom.evaluate('employee/name',xmldom.documentElement,null,XPathResult.ORDERED_NODE_SNAPSHOT_TYPE,null);
if (result!==null){
for (let i=0,len=result.snapshotLength;i<len;i++){
console.log(result.snapshotItem(i).tagName);
}
}
单个节点结果
XPathResult.FIRST_ORDERED_NODE_TYPE
结果类型返回匹配的第一个节点,可以通过结果singleNodeValue
属性获取
let result = xmldom.evaluate("employee/name",xmldom.documentElement,null,
XPathResult.FIRST_ORDERED_NODE_TYPE,null);
if (result!==null){
console.log(result.singleNodeValue.tagName);
}
简单类型结果
如果至少有一个节点匹配XPath表达式,booleanValue
就是true,否则为false
let result = xmldom.evaluate("employee/name",xmldom.documentElement,null,
XPathResult.BOOLEAN_TYPE,null);
console.log(result.booleanValue)
NUMBER_TYPE
输出匹配的节点数量
let result = xmldom.evaluate("employee/name",xmldom.documentElement,null,
XPathResult.NUMBER_TYPE,null);
console.log(result.numberValue)
STRING_TYPE
匹配第一个元素中第一个文本节点包含的文本字符串。
let result = xmldom.evaluate("employee/name",xmldom.documentElement,null,
XPathResult.STRING_TYPE,null);
console.log(result.stringValue)
默认类型结果
ANY_TYPE
类型让求值自动返回默认类型结果。
通常默认类型结果是布尔值、数值、字符串和无序节点迭代器。
let result =xmldom.evaluate("employee/name",xmldom.documentElement,null,
XPathResult.ANY_TYPE,null);
if(result!==null) {
switch (result.resultType){
case XPathResult.STRING_TYPE:break;
case XPathResult.NUMBER_TYPE:break;
case XPathResult.BOOLEAN_TYPE:break;
case XPathResult.UNORDERED_NODE_ITERATOR_TYPE:break;
default:break;
}
}
- 本文链接:https://archer-lan.github.io/2023/11/20/JS-%E6%B5%8F%E8%A7%88%E5%99%A8%E5%AF%B9XPath%E7%9A%84%E6%94%AF%E6%8C%81/
- 版权声明:本博客所有文章除特别声明外,均默认采用 许可协议。