RubyGemのNokogiriのSAXパーサーを使ってパースする時に、XML処理命令(processing instruction)を処理する方法を知っている人がいたら、教えてください。
Nokogiri::XML::SAX::Parser.parse
に独自定義のドキュメントクラスを渡してパースしたいと思っています。
https://gitorious.org/rss/nokogiri/blobs/master/lib/rss/nokogiri.rb
から抜粋・一部改変します。
rss/nokogiri.rb
class NokogiriListener
def xmldecl version, encoding, standalone
super(version, encoding, standalone == 'yes')
end
def start_document
end
def end_document
end
def start_element(name, attrs = [])
end
def end_element(name)
end
def start_element_namespace(name, attributes = [], prefix = nil, uri = nil, ns = [])
name = [prefix, name].compact.join(':')
attrs = {}
attributes.each do |attr|
key = [attr.prefix, attr.localname].compact.join(':')
attrs[key] = attr.value
end
ns.each do |(prefix, uri)|
key = ['xmlns', prefix].compact.join(':')
attrs[key] = uri
end
tag_start name, attrs
end
def end_element_namespace(name, prefix = nil, uri = nil)
name = [prefix, name].compact.join(':')
tag_end name
end
def characters(string)
text(string)
end
def comment(string)
end
def warning(string)
end
def error(string)
raise NotWellFormedError.new(string) if string =~ /Entity '.*' not defined/
end
def cdata_block(string)
text(string)
end
end
parser = Nokogiri::XML::SAX::Parser.parse(NokogiriListener)
parser.parse(xml_data)
上のクラスにXML処理命令を扱うメソッドを追加して何らかの処理をしたいのですが、やり方が分かりません。
よろしくお願いします。