You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

JavaScript Document.evaluate执行含local-name()的XPath失败,出现异常片段

问题解决:JSFiddle中XPath含local-name()时的错误

错误原因

你遇到的</a>片段是JSFiddle环境的渲染/输入错误,并非你的XPath表达式或代码本身有问题——你的代码逻辑是正确的,/foods/*[position()=N]/local-name()是合法的XPath表达式。

修复步骤

  1. 清理代码输入:在JSFiddle的JavaScript面板重新输入代码,避免复制粘贴时带入多余的HTML标签(比如<a>相关片段)。确保代码框内只有纯JavaScript代码,没有HTML格式内容。
  2. 验证XPath写法:你的模板字符串拼接逻辑没问题,也可以直接写成完整表达式测试,比如:
    // 测试单个表达式,确认环境正常
    const testXPath = document.evaluate(
      '/foods/*[position()=1]/local-name()',
      doc,
      null,
      XPathResult.STRING_TYPE,
      null
    );
    console.log(testXPath.stringValue); // 应输出"meat"
    
  3. 替代方案:如果仍有问题,可改用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.26 16:34:51