【问题标题】:Nokogiri parse XML with xpathNokogiri 使用 xpath 解析 XML
【发布时间】:2013-03-21 10:11:03
【问题描述】:

我试图弄清楚如何通过 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 在标题属性中

更新

所以我试过了

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')

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

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

谢谢

【问题讨论】:

  • 我认为您缺少正确的 xpath 表达式。这个问题可能会有所帮助:stackoverflow.com/questions/3573643/….
  • 嗯,我将如何在我的设置中实现这一点?任何帮助表示赞赏

标签: ruby ruby-on-rails-3 xml-parsing nokogiri


【解决方案1】:

使用方法2,尝试使用:

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

这将返回一个节点集,其中包含具有非空标题的节点。然后你可以随心所欲地迭代集合。

【讨论】:

  • 谢谢,已更改为 doc.xpath('//xmlns:feed/xmlns:entry[xmlns:title[node()]]') 并且效果很好...您是否碰巧知道如何从 中选择地址
  • 试试:c.xpath('email/@address').text()。例如。取出当前节点下email标签的address属性,返回其文本值。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-11-20
相关资源
最近更新 更多