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"