Nokogiri::XML::Reader parses an XML document similar to the way a cursor would move. The Reader is given an XML document, and yields nodes to an each block.
Here is an example of usage:
reader = Nokogiri::XML::Reader(" <x xmlns:tenderlove='http://tenderlovemaking.com/'> <tenderlove:foo awesome='true'>snuggles!</tenderlove:foo> </x> ") reader.each do |node| # node is an instance of Nokogiri::XML::Reader puts node.name end
Note that #each can only be called once!! Once the cursor moves through the entire document, you must parse the document again. So make sure that you capture any information you need during the first iteration.
The Reader parser is good for when you need the speed of a SAX parser, but do not want to write a Document handler.
Attribute node type
CDATA node type
Comment node type
Document node type
Document Fragment node type
Document Type node type
Element node type
Element end node type
Entity end node type
Entity node type
Entity Reference node type
Notation node type
PI node type
Significant Whitespace node type
Text node type
Whitespace node type
XML Declaration node type
The encoding for the document
A list of errors encountered while parsing
The XML source
Get a list of attributes for the current node
# File lib/nokogiri/xml/reader.rb, line 97 def attribute_nodes nodes = attr_nodes nodes.each { |v| v.instance_variable_set(:@_r, self) } nodes end
Get a list of attributes for the current node.
# File lib/nokogiri/xml/reader.rb, line 89 def attributes Hash[attribute_nodes.map { |node| [node.name, node.to_s] }].merge(namespaces || {}) end
Move the cursor through the document yielding the cursor to the block
# File lib/nokogiri/xml/reader.rb, line 105 def each while cursor = self.read yield cursor end end