Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby Nokogiri和XPath帮助_Ruby_Xml_Xpath_Nokogiri - Fatal编程技术网

Ruby Nokogiri和XPath帮助

Ruby Nokogiri和XPath帮助,ruby,xml,xpath,nokogiri,Ruby,Xml,Xpath,Nokogiri,不可否认,我是一个Nokogiri新手,我肯定错过了什么 我只是想用这个XML打印author>name节点: <?xml version="1.0" encoding="UTF-8"?> <entry xmlns:gd="http://schemas.google.com/g/2005" xmlns:docs="http://schemas.google.com/docs/2007" xmlns="http://www.w3.org/2005/Atom" gd:etag=""

不可否认,我是一个Nokogiri新手,我肯定错过了什么

我只是想用这个XML打印author>name节点:

<?xml version="1.0" encoding="UTF-8"?>
<entry xmlns:gd="http://schemas.google.com/g/2005" xmlns:docs="http://schemas.google.com/docs/2007" xmlns="http://www.w3.org/2005/Atom" gd:etag="">
  <category term="http://schemas.google.com/docs/2007#document" scheme="http://schemas.google.com/g/2005#kind"/>
  <author>
    <name>Matt</name>
    <email>Darby</email>
  </author>
  <title>Title</title>
</entry>

出于某种原因,请使用
删除\u名称空间使上述位按预期工作

xml = Nokogiri::XML(@xml_string)
xml.remove_namespaces!
xml.xpath("//author/name").each do |node|
  puts node.text
end

=> "Matt"

亚历杭德罗已经回答了这个(+1),但我也添加了这个答案,因为他遗漏了诺科吉里代码

使用Nokogiri和XPath在某些命名空间中选择元素 您试图选择的元素位于默认名称空间中,在本例中似乎是
http://www.w3.org/2005/Atom
。请注意
xmlns=“
属性在
entry
元素上。您的XPath表达式将匹配不在任何命名空间中的元素。这就是代码在没有命名空间的情况下工作的原因

您需要为XPath表达式定义名称空间上下文,并指出XPath步骤以匹配该名称空间中的元素

xml.xpath("//a:author/a:name", {"a" => "http://www.w3.org/2005/Atom"})

注意,这里我们定义了一个名称空间作为映射的前缀,并使用这个前缀(
a
)在XPath表达式中。

原因是所有元素都在
http://schemas.google.com/docs/2007
namespace URI。必须将此URI之间的绑定声明为某个前缀,例如
atom
,然后XPath表达式应为
/*/atom:author/atom:name
xml.xpath("//a:author/a:name", {"a" => "http://www.w3.org/2005/Atom"})