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
相关产品推荐
相关产品推荐

