我正在从API解析XML并将它们显示在一个页面上,尽管我已将它们分页为每页30个。
我想通过使用link_to
方法单独查看每个属性,然后更新属性,然后可以将属性以XML发送回API。我没有做什么,虽然是保存到一个模型,只是显示。我可以将返回的结果视为对象吗?
这是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="xxx"/>
<link rel="xx" type="xxx" href="xxx"/> <link rel="xx" type="axx" href="xxx"/>
<gd:email rel="xxx" address="xxx" primary="xx"/>
</entry>
这是控制器:
def show
@contact = getcontact.find(params[:title])
end
这是getcontact
方法:
doc = Nokogiri::XML.parse(open(url))
doc.xpath('//xmlns:feed/xmlns:entry[xmlns:title[node()]]')
这是路由:
match 'contacts/xmlns:title' => 'contacts#show'
All Contacts视图:
<% @mycontacts.each do |c| %>
Name: <%= c.xpath('xmlns:title').text %>
Email: <%= c.xpath('gd:email/@address').text %>
<%= link_to "Update Contact", contact_path(c.xpath('xmlns:title').text) %></p>
<% end %>
Show视图:
<%= @contact.xpath('xmlns:title') %>
<%= @contact.xpath('gd:email/@address') %>
当我点击链接查看个人联系人时,我得到一条错误消息:
undefined method `xpath' for #<Enumerator:0x3cc6570>
编辑:
将所有内容保存到模型中,在应用程序中更新,然后转换为XML并将其发送回来会更好吗?这似乎有点啰嗦,但这是最好的做法吗?
是的,我将创建一个封装API和检索方法的模型。另外,我会使用httpparty,它是专门为这个用例设计的。它将自动进行XML和XML之间的转换。(虽然如果这是一个RSS提要,我可能会使用专用的RSS解析器)
这种分离不会"冗长",事实上,它会更干净,更高效,因为你可以缓存,甚至只是在模型中记忆,最大限度地减少你必须做的抓取量。