Как я могу остановить синтаксический анализ, когда найти 1-й элемент? - PullRequest
0 голосов
/ 23 октября 2009

Я бы хотел прекратить синтаксический анализ, когда найду 1-й элемент, даже если после этого будет еще один элемент Я использую libxml, SAX на ruby.
Этот код показывает каждый элемент <usr>.
Но я хочу прекратить разбирать когда найду 1й <usr>.
Потому что этот XML-файл будет огромным. Кто-нибудь знает как прекратить разбирать при поиске 1-го элемента методом SAX.

код

#! ruby -Ku

require 'rubygems'
require 'libxml'
include LibXML

class PostCallbacks
  include XML::SaxParser::Callbacks

  def on_start_element(element, attributes)
    if /usr/ =~ element
      p element
    end
  end

end

parser = XML::SaxParser.file('test.xml')
parser.callbacks = PostCallbacks.new
parser.parse

Спасибо.

1 Ответ

1 голос
/ 23 октября 2009

Я не знаю, применимо ли это и к Ruby, но для модуля Python SAX нужно выбросить исключение, чтобы выйти из фазы "разбора" ... это единственный способ сделать это без взлома.

Полагаю, если вы не нашли метод в документации по Ruby, это, вероятно, означает, что мое предложение разумно; -)

...