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

Nokogiri解析含数字节点名XML时XPath报错的原因及解决办法咨询

解决Nokogiri解析数字命名XML节点的XPath语法错误

这个错误不是Nokogiri不支持数字作为节点名,而是XPath语法本身的限制:XPath中直接以数字开头的标识符会被解析为数字字面量,而非节点名称,导致语法报错。

解决办法

要匹配数字命名的节点,需要用local-name()函数指定节点的本地名称,修改最后一行代码即可:

puts doc.at('/pajamas/bananas/*[local-name()="1"]')

或者也可以用更简洁的方式,直接通过节点名称字符串查找:

# 全局匹配名称为"1"的节点
puts doc.at_xpath('//*[name()="1"]')
# 精准匹配指定路径下的目标节点
puts doc.at_xpath('/pajamas/bananas/*[name()="1"]')

验证修改后的完整代码

#!/usr/bin/env ruby
require 'nokogiri'

xml = <<-EOXML
<pajamas>
  <bananas>
    <foo>bar</foo>
    <bar>bar</bar>
    <1>bar</1>
  </bananas>
</pajamas>
EOXML

doc = Nokogiri::XML(xml)
puts doc.at('/pajamas/bananas/foo')
puts doc.at('/pajamas/bananas/bar')
puts doc.at('/pajamas/bananas/*[local-name()="1"]')

执行后会正常输出三个节点的内容,包括数字命名的<1>bar</1>。

内容的提问来源于stack exchange,提问作者engartst

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 11:35:29