引入nokogiri解析Rails中
我使用引入nokogiri解析来自Rackspace的API 一回,所以我使用他们的示例代码引入nokogiri解析Rails中
response = server.get '/customers/'[email protected]_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返回Rackspace公司回报节点的元素节点列表
由于某种原因,我似乎错过了一些明显的东西,我只是为了我的生活无法得到它来解析节点列表并将它们还给我,有没有简单的我可以做的事情修复它以返回节点列表?
这里的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>
干杯
这个问题似乎是,你要告诉引入nokogiri他们的命名空间。
如果您从domainLists标记中删除xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="urn:xml:domainList"
,您会看到您的查询工作。
否则,您需要告诉Nokogiri该名称空间。
doc.xpath("//blarg:name", {'blarg' => 'urn:xml:domainList'}).each do |name|
puts name.text
end
Nokogiri xpath接受第二个参数,它是名称空间的散列。你有xml定义了一个通用名称空间,但没有给它一个标签。我不知道nokogiri是否有办法找到它,所以在搜索时只需要给你的搜索一个任意的标签,并将命名空间路径与该标签相关联。你可以放任何你想要的文字而不是blarg,这仅仅是一个例子。
你是一个绝对的救星,谢谢! – Schroedinger 2010-05-24 21:52:43
你可以发布一个XML数据的例子出现在你的响应变量? – tommasop 2010-05-24 07:27:28
我已经添加了一个我试图解析的XML类型的例子 – Schroedinger 2010-05-24 07:52:08