高橋征義です。

eda / nerv.orgさん:
> XMLに興味がありつつ、XMLParserがなんだか難しそうなのとexpatがいることから
> 尻込みしてたのですが、ChibiXMLが小さいのでちょっと手をだそうと思いました。
> 
> XML自体詳しくないので、どうあつかったらよいのかわからないので
> なにかサンプルでもあればと思ったのですが、ChibiXMLを使ったアプリケーションは
> ありますでしょうか?

MoonWolfさんが作っているいくつかのプログラムではChibiXMLにも
対応しているんじゃなかったでしたっけ。

とりあえずvisitorを使ったサンプルを書いてみました。XMLParser
からの移植です。


#! /usr/bin/env ruby

=begin
 visitor test scripts ported from Yoshidam's XMLParser

 Original Copyright is:
  ## Visitor test
  ## 1998 by yoshidam
  ##
  ## This sample comes from Ken MacLeod's sample of XML-Grove-0.05
  ## Copyright (C) 1998 Ken MacLeod

=end

require 'chibixml'
require 'chibiparse'

class MyVisitor
  include ChibiXML

  def initialize()
    @context = []
  end

  def visit_Element(element, *rest)
    @context.push(element.nodeName)
    attrs = []
    element.attributes.each do |attr|
      attrs.push(attr.to_s)
    end
    print "#{@context.join(' ')} \\\\ (#{attrs.join(' ')})\n"
    element.children_accept(self, *rest)
    print "#{@context.join(' ')} //\n"
    @context.pop
  end

  def visit_ProcessingInstruction(pi, *rest)
    print "#{pi.nodeName} ?? #{pi.target}(#{pi.data})\n"
  end

  def visit_Text(text, *rest)
    value = text.nodeValue
    print "#{@context.join(' ')} || #{value.dump}\n"
  end

  def visit_Document(document, *rest)
    document.children_accept(self, *rest)
  end

#  def method_missing(method_sym, *args)
#    if /^visit_/ !~ method_sym.to_s
#      raise NameError, "undefined method `#{method_sym.to_s}' for #{self.intern}"
#    end
#  end

end

doc = ChibiXML.parse($<.read)
doc.accept(MyVisitor.new)



高橋征義 (TAKAHASHI Masayoshi)       Email:maki / inac.co.jp