ruby 当节点名是/包含整数时,使用Nokogiri解析非XML文档

ulydmbyx  于 2023-01-30  发布在  Ruby
关注(0)|答案(1)|浏览(122)

当我跑步时:

#!/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/1')

我得到一个ERROR: Invalid expression: /pajamas/bananas/1 (Nokogiri::XML::XPath::SyntaxError)
这是Nokogiri不喜欢int作为节点名的情况吗?和/或有什么解决办法吗?
查看文档,我没有看到解决这个问题的方法。删除最后一行可以消 debugging 误,并按预期打印前两个节点。

kqlmhetl

kqlmhetl1#

名称以数字开头的XML元素是无效的XML。
XML元素必须遵循以下命名规则:

  • 名称可以包含字母、数字和其他字符
  • 名称不能以数字或标点字符开头
  • 名称不能以字母xml(或XML、或Xml等)开头
  • 名称不能包含空格可以使用任何名称,不保留任何单词。

如果你想用XML解析器解析无效的XML,那是行不通的。如果你真的想把<1>作为一个标签,并且不知怎么的不能控制它,我建议在进入nokogiri之前用正则表达式替换标签。

相关问题