最近のキーワード

2006年07月15日

tdp4rでXMLの変換

tdp4rのサンプルで、XMLの変換を行ってみた。REXMLのパーサを少し利用している。
下は、a,bのタグが連続する場合にはfoo,barに置き換えて、それ以外のタグは大文字に変換するようなコード。
translator = TDParser.define{|g|
  g.xml =
    token([:start_element, "a", Hash]) -
      token([:start_element, "b", Hash]) -
        g.xml*0 -
      token([:end_element, "b"]) -
    token([:end_element, "a"]) >> Proc.new{|x|
      "<foo><bar>#{x[2]}</bar></foo>"
    } |
    token([:start_element, String, Hash]) -
      g.xml*0 -
    token([:end_element, String]) >> Proc.new{|x|
      stag = x[0][1].upcase()
      etag = x[2][1].upcase()
      "<#{stag}>#{x[1]}</#{etag}>"
    } |
    token!([:end_element, 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
}
posted by ttate at 06:32| 🌁| Comment(0) | TrackBack(0) | Ruby | このブログの読者になる | 更新情報をチェックする
この記事へのコメント
コメントを書く
お名前:

メールアドレス:

ホームページアドレス:

コメント:

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


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

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

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