Help us understand the problem. What is going on with this article?

【質問】【解決済み】NokogiriのSAXパーサーで処理命令をハンドリングしたい

More than 5 years have passed since last update.

 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処理命令を扱うメソッドを追加して何らかの処理をしたいのですが、やり方が分かりません。

 よろしくお願いします。

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away