使用Nokogiri时的 XML 命名空间问题

3

我有以下XML:

<body>
  <hello xmlns='http://...'>
     <world>yes</world>
  </hello>
</body>

当我将这个加载到Nokogiri XML文档中并调用document.at_css "world"时,会返回nil。但是当我移除hello的命名空间时,它就可以正常工作了。我知道可以调用document.remove_namespaces!,但为什么在有命名空间的情况下无法使用?


可能是Nokogiri / Xpath命名空间查询的重复问题。 - Mark Thomas
这指的是css,而不是xpath - TheDude
命名空间技术是相同的。无论您的查询是CSS还是XPath,都没有关系。 - Mark Thomas
1个回答

1
因为 Nokogiri 要求您在查询时注册 XML 命名空间(请阅读有关 XML 命名空间 的更多信息)。但是,如果在调用 at_css 时指定其命名空间,仍应该能够查询元素。要查看确切的用法,请查看 css 方法文档。它应该看起来像这样:
document.at_css "world", 'namespace_name' => 'namespace URI'

2
谢谢你指向那个例子。你提供的方法不起作用,但是当我包含命名空间管道时它就可以工作:document.at_css 'ns|world', 'ns' => 'namespace URI - TheDude
3
值得注意的是,如果在根元素上声明了命名空间,那么 #at_css#css 方法将隐式地将该命名空间包含在查询中。 - Mike Dalessio

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接