[참고:Rails for Java Developers]
xml 파싱 중, 푸시파싱과 풀파싱. 둘다 순서대로 한방향으로 이동하며 처리되는 로직이다.
트리파싱은 전체 문서를 불러들이고 무작위로 접근. 복잡한 문서활용때 효과증가.
푸시파싱//
require 'rexml/parsers/sax2parser'
include REXML::Parsers
targets = []
xml ='<data><type name="a">test1</type>
<type name="b">test2</type>
<type name="c">test3</type></data>'
parser = SAX2Parser.new(xml)
parser.listen(:start_element, %w{type}) do |u,l,q,atts|
targets << {:name=>atts['name']}
end
parser.parse
puts targets
=>namea
nameb
namec
##여기서 %w{}는 배열 생성자
풀파싱//
require 'rexml/parsers/pullparser'
include REXML::Parsers
targets = []
xml ='<data><type name="a">test1</type>
<type name="b">test2</type>
<type name="c">test3</type></data>'
parser = PullParser.new(xml)
parser.each do |e|
if e.start_element? and e[0] == 'type'
targets << {:name=>e[1]['name']}
end
end
puts targets
=>namea
nameb
namec
트리파싱//
require 'rexml/document'
include REXML
targets = []
xml ='<data><type name="a">test1</type>
<type name="b">test2</type>
<type name="c">test3</type></data>'
Document.new(xml).elements.each("//type") do |e|
targets << {:name=>e.attributes["name"]}
end
puts targets
=>namea
nameb
namec
빌더로 xml 생성
require 'rubygems'
require 'builder'
xml = Builder::XmlMarkup.new :type=>STDOUT, :indent=>1
xml.data do
xml.type "test1", :name=>"a"
xml.type "test2", :name=>"b"
xml.type "test3", :name=>"c"
end
puts xml.to_ary
=><data>
<type name="a">test1</type>
<type name="b">test2</type>
<type name="c">test3</type>
</data>
<to_ary/>
##레일스에 기본적으로 내장되어있는 줄 알고 있었는데, 새로 설치해야 했다. 그럴 경우 gem install builder로 설치
rails 1.x 버전은 require_gem, 2.x 버전은 그냥 require로...
[기타정보]
rexml 공식 // http://www.germane-software.com/software/rexml/
rexml api reference // http://docs.huihoo.com/rdoc/ruby/stdlib/libdoc/rexml/rdoc/index.html
builder reference // http://builder.rubyforge.org/
◀ PREV :
[1] : [···] : [117] : [118] : [119] : [120] : [121] : [122] : [123] : [···] : [127] :
NEXT ▶