当我 run 的时候:

#!/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作为 node 名和/或有解决办法?

查看文档时,我没有看到解决此问题的方法.删除最后一行可以消除错误,并按预期打印前两个 node .

推荐答案

名称以数字开头的XML元素是无效的XML.

XML元素必须遵循以下命名规则:

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

您试图用一个XML解析器来解析无效的XML,这是行不通的.如果你真的得到<1>作为一个标记,但不知何故无法控制它,我建议在使用nokogiri之前使用正则表达式替换这些标记.

Ruby相关问答推荐

Ruby 中使用的-S标志是什么?

使用数组作为其中之一转换键和值

使用 Ruby,是否可以将 BigDecimal("1") / BigDecimal("3") 打印为 0.3333333333333... 到任意长度?

Ruby 和用正则表达式分割字符串

Procs的绑定

在 Ruby 中导出环境变量

在 YAML 变量中包含 jekyll / liquid 模板数据?

确保如何在 ruby​​ 中工作

Ruby 1.9 - 无效的多字节字符(US-ASCII)

如何在控制台中禁用 MongoDB 日志(log)消息?

Puppet/Facter无法检索事实 fqdn:如何修复或规避?

. vs ::(点与双冒号)用于调用方法

如何在数组中找到出现次数最多的项目

项目目录的相对路径

如果公司使用 C++、C# 或 Java 作为应用程序语言,为什么要学习 Perl、Python、Ruby?

从数组 Ruby 中删除元素

检索/列出 Redis 数据库中的所有键/值对

如何在 Capistrano v3 的服务器上运行 shell 命令?

Rubocop 25 线块大小和 RSpec 测试

带有类名的动态类定义