Hatena::ブログ(Diary)

はけの徒然日記 このページをアンテナに追加 RSSフィード

2005 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2006 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2007 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2008 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2009 | 01 | 02 | 04 | 05 | 08 | 09 | 10 | 12 |
2010 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 10 | 11 |
2011 | 01 | 02 | 03 | 04 | 11 | 12 |
2012 | 02 | 03 | 05 |
2014 | 02 | 03 | 04 | 05 | 12 |
2015 | 05 | 07 | 08 | 09 | 10 | 11 | 12 |
2016 | 01 | 02 | 04 | 05 | 08 | 09 | 11 | 12 |
2017 | 01 | 02 | 03 | 04 | 05 |

2006-09-03(Sun)

XMLの解析

Ruby勉強

昨日のスクリプトだと何故かPodcast系のRSSが上手くいかないので、REXMLを使用してxmlを直接解析。xml

 <foo …>……</foo>

を一つのelementとして扱うみたい、基本的にはあるelementが子elementを持っているか確認してeach_elementで階層を降りていくように解析していく?

参考サイト


以下は、そのelementの各要素を扱うサンプルスクリプト

require 'rexml/document'

# サンプルxml
#<root>
#  <pre_c1:child1>text_child1</pre_c1:child1>
#  <child2 key1='val1' key2='val2' />
#</root>
src = %q{<root><pre_c1:child1>text_child1</pre_c1:child1><child2 key1="val1" key2="val2" /></root>}
doc = REXML::Document.new(src)

p doc.root               # => <root> ... </>
p doc.root.has_elements? # => true

# 各child elementを処理する場合
doc.root.each_element do |element|
  p element
end
  # => <pre_c1:child1> ... </>
  # => <child2 key1='val1' key2='val2'/>

# elementを直接指定する場合
elem = doc.root.elements["pre_c1:child1"]
p elem.prefix                # => "pre_c1"
p elem.name                  # => "child1"
p elem.expanded_name         # => "pre_c1:child1"
p elem.fully_expanded_name   # => "pre_c1:child1"
p elem.has_text?             # => true
p elem.text                  # => "text_child1"

elem = doc.root.elements["child2"]
p elem.prefix                # => ""
p elem.has_attributes?       # => true
p elem.attributes # => {"key1"=>key1='val1', "key2"=>key2='val2'}
p elem.attributes["key1"]    # => "val1"

投稿したコメントは管理者が承認するまで公開されません。

スパム対策のためのダミーです。もし見えても何も入力しないでください
ゲスト


画像認証

トラックバック - http://d.hatena.ne.jp/hake/20060903/p1