Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/14.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 on rails Nokogiri在Rails中使用XPath解析Rackspace返回_Ruby On Rails_Xml_Ruby_Xpath_Nokogiri - Fatal编程技术网

Ruby on rails Nokogiri在Rails中使用XPath解析Rackspace返回

Ruby on rails Nokogiri在Rails中使用XPath解析Rackspace返回,ruby-on-rails,xml,ruby,xpath,nokogiri,Ruby On Rails,Xml,Ruby,Xpath,Nokogiri,我正在使用Nokogiri解析来自Rackspace API的返回 所以我使用他们的示例代码 response = server.get '/customers/'+@user.customer_id.to_s+'/domains/', server.xml_format doc = Nokogiri::XML::parse response.body puts "xpath values" doc.xpath("//name").each do |node| pu

我正在使用Nokogiri解析来自Rackspace API的返回 所以我使用他们的示例代码

   response = server.get '/customers/'+@user.customer_id.to_s+'/domains/', server.xml_format
   doc = Nokogiri::XML::parse response.body
   puts "xpath values"
   doc.xpath("//name").each do |node|
   puts
     node.text
   end
作为我的代码,使用Nokogiri返回元素的节点列表

出于某种原因,我似乎错过了一些显而易见的东西,我无法让它解析节点列表并返回给我,我能做些简单的事情来修复它,让它返回节点列表吗

下面是我试图解析的XML的一个示例:

   <domainList xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="urn:xml:domainList">
  <offset>0</offset>
  <size>50</size>
  <total>4</total>
  <domains>
    <domain>
      <name>domain1.com</name>
      <accountNumber>xxxxxxx</accountNumber>
      <serviceType>exchange</serviceType>
    </domain>
    <domain>
      <name>domain2.com</name>
      <accountNumber>xxxxxxx</accountNumber>
      <serviceType>exchange</serviceType>
    </domain>
    <domain>
      <name>domain3.com</name>
      <accountNumber>xxxxxxx</accountNumber>
      <serviceType>exchange</serviceType>
    </domain>
  </domains>
</domainList>

0
50
4.
域名1.com
xxxxxxx
交换
域名2.com
xxxxxxx
交换
域名3.com
xxxxxxx
交换

干杯

问题似乎是你必须告诉Nokogiri他们的名称空间

doc.xpath("//blarg:name", {'blarg' => 'urn:xml:domainList'}).each do |name|
  puts name.text
end
如果删除
xmlns:xsi=”http://www.w3.org/2001/XMLSchema-instance“xmlns:xsd=”http://www.w3.org/2001/XMLSchema“xmlns=”urn:xml:domainList“
从您的domainList标记可以看到您的查询工作

否则,您需要告诉Nokogiri这个名称空间

doc.xpath("//blarg:name", {'blarg' => 'urn:xml:domainList'}).each do |name|
  puts name.text
end

Nokogiri xpath接受第二个参数,它是名称空间的散列。您拥有的xml定义了一个通用名称空间,但没有给它一个标记。我不知道nokogiri是否有办法找到这个,所以在搜索时,只需给搜索一个任意标记,并将名称空间路径与该标记关联。您可以放置任何您想要的文本,而不是blarg,这只是一个示例。

您可以发布一个响应变量中存在的xml数据示例吗?我已经添加了一个我试图解析的xml类型示例。您绝对是一个救命恩人,谢谢!