0

我试图弄清楚如何通过 api 调用解析返回的 XMl,我正在使用 Nokogiri 并正在尝试使用 xpath。我想做的是显示所有已返回的“标题”属性

到目前为止,我有一个方法

def getcontact
doc = Nokogiri::XML(open(url))
doc.xpath('//xmlns:feed/xmlns:entry')
end

控制器

@mycontacts = getcontact

看法

<% @mycontacts.each do |c| %>
 <%= c.xpath("//title") %>
<% end %>

XML

<entry>
 <id>xxx</id>
 <updated>xxx</updated> 
 <category  scheme="xxx"  term="xxx"/>
 <title type="text">xxx</title>
 <link rel="xxx" type="xxx"    href="xxx"/> 
 <link rel="xxx0gmail.com/b6ea0e8ddbc4e5"/>     
 <link rel="xx" type="xxx" href="xxx"/> <link rel="xx" type="axx" href="xxx"/> 
 <gd:email rel="xxx" address="xxx" primary="xx"/> 
</entry>

我没有得到任何返回,有人能指出我做错了什么吗,我还注意到返回的 XML 中有 html 标签,我可以把它去掉吗,例如 type=text 在 title 属性中

更新

所以我试过这个

doc.xpath('//xmlns:feed/xmlns:entry/xmlns:title').text

但这会将所有标题作为字符串返回

更新 2

看法

<% @mycontacts.each do |c| %>
 <%= c.xpath('xmlns:title').text %><br>
<% end %>

方法

doc.xpath('//xmlns:feed/xmlns:entry')

所以这列出了我所有的标题,但如果有任何空白条目,则有一条空记录。我想现在需要从循环中删除这些

这是正确的,有更好的方法吗?

谢谢

4

1 回答 1

2

使用方法 2,尝试使用:

d.xpath('//feed/entry[title[node()]]'

This will return a nodeset containing nodes that have a non-empty title. Then you can iterate over set however you like.

于 2013-03-31T00:57:46.213 回答