最近のキーワード

2006年07月19日

TDP4RでXMLの変換(2)

少しサンプル(sample_xml.rb)を改良して、パースしながらDOMを構成するようにしてみた。 文法部分は以下の通り。XMLParserというモジュールにXML用のパーサとしてelementやconstructというものを定義している。まだ未完成で悩ましいところは多々あるが、完成すれば、XSLTやテンプレートなどとは違ったXMLの変換ができる。
translator = TDParser.define{|g|
  extend XMLParser

  g.xml =
    element("a"){
      element("b"){
        g.xml*0 >> Proc.new{|x| x[0].collect{|y| y[0]} }
      } >> construct{|node| node.name = "bar"; node }
    } >> construct{|node| node.name = "foo"; node } |

    element(String){
      g.xml*0 >> Proc.new{|x| x[0].collect{|y| y[0]} }
    } >> construct{|node|
      node.name = node.name.upcase()
      node
    } |

    ~etag(String) - any() - g.xml >> Proc.new{|x| x[2]}

  def translate(src)
    xparser = REXML::Parsers::BaseParser.new(src)
    xml.parse{|g|
      while(xparser.has_next?)
        g.yield(xparser.pull())
      end
    }
  end
}
ラベル:tdp4r xml ruby
posted by ttate at 07:24| ☔| Comment(0) | TrackBack(0) | Ruby | このブログの読者になる | 更新情報をチェックする
この記事へのコメント
コメントを書く
お名前:

メールアドレス:

ホームページアドレス:

コメント:

認証コード: [必須入力]


※画像の中の文字を半角で入力してください。

この記事へのトラックバック
×

この広告は180日以上新しい記事の投稿がないブログに表示されております。