Versuchen Sie, die Suite von SAX-Methoden implementiert werden und sehen, was Sie bekommen:
require 'nokogiri'
class MyDoc < Nokogiri::XML::SAX::Document
def cdata_block(str)
puts "cdata_block: #{str}"
end
def characters(str)
puts "characters: #{str}"
end
def comment(str)
puts "comment: #{str}"
end
def end_element(str)
puts "end_element: #{str}"
end
def end_document
puts "end_document"
end
def end_element_namespace(name, prefix = nil, uri = nil)
puts "end_element_namespace: name: #{name} prefix: #{prefix} uri: #{uri}"
end
def error(str)
puts "error:#{str}"
end
def processing_instruction(name, content)
puts "processing_instruction: name: #{name} content: #{content}"
end
def start_document
puts "start_document"
end
def start_element(str, attrs = [])
puts "start_element: #{str} attrs: #{attrs}"
end
def start_element_namespace(name, attrs=[], prefix=nil, uri=nil, ns=[])
puts "start_element_namespace: name: #{name} attrs: #{attrs} prefix: #{prefix} uri: #{uri} ns: #{ns}"
end
def warning(str)
puts "warning: #{str}"
end
def xmldecl(version, encoding, standalone)
puts "xmldecl: version: #{version} encoding: #{encoding} standalone: #{standalone}"
end
end
parser = Nokogiri::XML::SAX::Parser.new(MyDoc.new)
parser.parse(File.open(ARGV[0]))
speichern, die ein Skript und führen Sie es mit:
ruby path/to/script.rb path/to/file.xml
Sie sollten die Ausgabe sehen. Zum Beispiel mit dem folgenden als eine einfachen XML-Datei:
<?xml version="1.0"?>
<catalog>
<book id="bk101">
<author>Gambardella, Matthew</author>
<title>XML Developer's Guide</title>
<genre>Computer</genre>
<price>44.95</price>
<publish_date>2000-10-01</publish_date>
<description>An in-depth look at creating applications
with XML.</description>
</book>
</catalog>
bekomme ich folgende Ausgabe:
xmldecl: version: 1.0 encoding: standalone:
start_document
start_element_namespace: name: catalog attrs: [] prefix: uri: ns: []
characters:
start_element_namespace: name: book attrs: [#<struct Nokogiri::XML::SAX::Parser::Attribute localname="id", prefix=nil, uri=nil, value="bk101">] prefix: uri: ns: []
characters:
start_element_namespace: name: author attrs: [] prefix: uri: ns: []
characters: Gambardella, Matthew
end_element_namespace: name: author prefix: uri:
characters:
start_element_namespace: name: title attrs: [] prefix: uri: ns: []
characters: XML Developer's Guide
end_element_namespace: name: title prefix: uri:
characters:
start_element_namespace: name: genre attrs: [] prefix: uri: ns: []
characters: Computer
end_element_namespace: name: genre prefix: uri:
characters:
start_element_namespace: name: price attrs: [] prefix: uri: ns: []
characters: 44.95
end_element_namespace: name: price prefix: uri:
characters:
start_element_namespace: name: publish_date attrs: [] prefix: uri: ns: []
characters: 2000-10-01
end_element_namespace: name: publish_date prefix: uri:
characters:
start_element_namespace: name: description attrs: [] prefix: uri: ns: []
characters: An in-depth look at creating applications
with XML.
end_element_namespace: name: description prefix: uri:
characters:
end_element_namespace: name: book prefix: uri:
characters:
end_element_namespace: name: catalog prefix: uri:
end_document
Es ist es wichtig, den SAX-Parser zu verwenden? Vielleicht ist es ein Fehler in dieser Bibliothek. – tadman
@tadman Es ist eine große Datei, nur die Option verwendet nur den SAX-Parser. –
Es könnte sich lohnen, ein wenig Code zu geben, der erklärt, wie Sie dies mit Nokogiri tun. Im Moment scheint es ein Fehler in SAX zu sein, aber es könnte ein Problem sein, wie Nokogiri damit umgehen kann. – tadman