JavaScript Document.evaluate执行含local-name()的XPath失败,出现异常片段
问题解决:JSFiddle中XPath含local-name()时的错误
错误原因
你遇到的</a>片段是JSFiddle环境的渲染/输入错误,并非你的XPath表达式或代码本身有问题——你的代码逻辑是正确的,/foods/*[position()=N]/local-name()是合法的XPath表达式。
修复步骤
- 清理代码输入:在JSFiddle的JavaScript面板重新输入代码,避免复制粘贴时带入多余的HTML标签(比如
<a>相关片段)。确保代码框内只有纯JavaScript代码,没有HTML格式内容。 - 验证XPath写法:你的模板字符串拼接逻辑没问题,也可以直接写成完整表达式测试,比如:
// 测试单个表达式,确认环境正常 const testXPath = document.evaluate( '/foods/*[position()=1]/local-name()', doc, null, XPathResult.STRING_TYPE, null ); console.log(testXPath.stringValue); // 应输出"meat" - 替代方案:如果仍有问题,可改用
name()函数(无命名空间场景下和local-name()效果一致):`${xpath}/name()`
完整可运行代码
const xml = "<foods><meat>chicken</meat><fruit>orange</fruit><fruit>apple</fruit><fruit>banana</fruit></foods>"; const doc = new DOMParser().parseFromString(xml, 'application/xml'); for (var i = 0; i < 4; i++) { const xpath = `/foods/*[position()=${i+1}]`; const xpathValue = document.evaluate( xpath, doc, null, XPathResult.STRING_TYPE, null ); const xpathName = document.evaluate( `${xpath}/local-name()`, doc, null, XPathResult.STRING_TYPE, null ); console.log(`${xpathName.stringValue} = ${xpathValue.stringValue}`); }
运行后控制台应输出:
meat = chicken fruit = orange fruit = apple fruit = banana
内容的提问来源于stack exchange,提问作者Andrew Tyson
相关产品推荐
相关产品推荐

