Можно ли получить доступ к содержимому объекта XML с использованием синтаксиса точки? - PullRequest
2 голосов
/ 19 мая 2009

Здравствуйте. Я использую LibXML для анализа RSS-канала, и мне интересно, возможно ли получить доступ к содержимому с использованием точечного синтаксиса (или просто).

Так что, если у меня есть:

<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 ]

3 голосов
/ 19 мая 2009

Нет. Самый простой способ - использовать XPath . Например, чтобы получить список всех «текстовых» узлов, которые являются потомками «post» узла:

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 голос
/ 19 мая 2009

Если вы готовы выполнить небольшую работу по настройке, тогда вам может пригодиться 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

Все совершенно не проверено, боюсь ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...