是否可以使用点语法访问xml对象的内容?

时间:2009-05-19 16:51:32

标签: xml ruby

您好我正在使用LibXML来解析RSS Feed,我想知道是否可以使用点语法访问内容(或者同样简单)。

所以,如果我有:

<post>
  <created_at>Sat Aug 09 05:38:12 +0000 2008</created_at> 
  <id>882281424</id> 
  <text>I so just thought the guy lighting the Olympic torch was falling when he began to run on the wall. Wow that would have been catastrophic.</text> 
  <source>web</source> 
  <truncated>false</truncated> 
  <in_reply_to_status_id></in_reply_to_status_id> 
  <in_reply_to_user_id></in_reply_to_user_id>
</post>

我可以像

那样访问它
text = post.text

2 个答案:

答案 0 :(得分:3)

没有。最简单的方法是使用XPath。例如,要获取作为“post”节点的子节点的所有“text”节点的list

doc = parser.parse
text_node = doc.find('/post/text') #returns all children 

或者获得第一个(仅限本案例)节点:

doc = parser.parse
text_node = doc.find_first('/post/text') #returns first child only

答案 1 :(得分:1)

如果您准备进行一些设置工作,那么您可能会发现HappyMapper很有用。

你声明一个类及其映射(或至少你感兴趣的部分) - 在你的情况下它可能看起来像这样

class Post
  include HappyMapper
  element :text, String
end

使用类似这样的东西:

posts = Post.parse(File.read(path_to_rss.xml))
posts.each do |post|
  puts post.text
end

所有完全未经测试的,我害怕...