[참고: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/

Posted by Elegant Universe
황대산 님의 책을 보고 구현하다가, scaffold 부분에서 계속 막혔다.
특히 2.0 버전으로 업뎃되면서, scaffold 기능도 없어지고, sqlite로 db가 기본설정되니, 막히는 부분이 많았다.
이것 저것 찾아보면서, 드디어 해결책을 본바...

2.0버전에서 scaffold 기능 추가하는 방법은 다른데 찾아보면 자세히 설명되어 있고, 나는 귀찮아서, 최소한의 변경만 고려했다.

책의 예제들을 실행하기 위해, 필요한 부분을 나열한다.

1.  최신버전일 경우 1.2.3 버전으로 회귀한다
c:\> gem uninstall rails
c:\> gem install rails --version '= 1.2.3' --include-dependencies

2. mysql을 실행하기 위해
바로 rails phonebook이라고 해버리면,
database.yml 에 sqllite로 설정이 되버린다.

그러므로, mysql을 사용하려면

rails -d mysql phonebook

식으로 명시적으로 사용, 생성한다.
또한, database.yml 파일도 그에 맞게 수정한다.

3. mysql은 4.1이나 5.0 버전을 이용한다.
database.yml 파일 안에도 그렇게 쓰여져있고, 본인은 최신 버전인 mysql6.0을 사용하다가 피봤다. 그러므로 5.0버전 중 최신버전을 이용한다.

이렇게 하면, 아직까지는 큰 탈 없이 잘 된다.

4. rake 기능이 안먹히는 경우가 있다.
가령, rake db:migrate를 실행했을때,
c:/ruby/bin/rake.bat:24: undefined method `require_gem' for main:Object (NoMethodError)
라는 메시지를 보게 되는 경우, 해결방법은
위의 rake.bat 파일을 열어, 밑의
require_gem 'rake'version
 gem 'rake',version
로 바꾸어 준다.
아, 버전에 따라 막히는 부분들이, 슬슬 짱나...ㅜ

5. BlueCloth 라이브러리를 사용하기 위해, 설치하려고 책에 나와있는대로 실행하면,
c:/web_apps/blog_app>gem install bluecloth
Error:  could not find bluecloth locally or in a repository
라고 뜬다.
해결방안은, 명시적으로 찾아 설치하게끔 만든다.
gem query -rn Blue 라고 치면,
*** REMOTE GEMS ***
BlueCloth (1.0.0)
bluepay (1.0.1)
로 찾고
gem install -r BlueCloth 라고 치므로써
Successfully installed BlueCloth-1.0.0
설치가 된다.
Posted by Elegant Universe

카테고리

전체 (118)
Programming (15)
Digital Nomad (2)
Projects (7)
Sound (14)
Travel (69)
Think (9)

최근에 올라온 글

최근에 달린 댓글

최근에 받은 트랙백

달력

«   2024/04   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30

글 보관함