class Nokogiri::XML::Reader
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(<<-eoxml) <x xmlns:tenderlove='http://tenderlovemaking.com/'> <tenderlove:foo awesome='true'>snuggles!</tenderlove:foo> </x> eoxml reader.each do |node| # node is an instance of Nokogiri::XML::Reader puts node.name end
Note that Nokogiri::XML::Reader#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.
Constants
- TYPE_ATTRIBUTE
Attribute node type
- TYPE_CDATA
CDATA
node type- TYPE_COMMENT
Comment node type
- TYPE_DOCUMENT
Document
node type- TYPE_DOCUMENT_FRAGMENT
Document
Fragment node type- TYPE_DOCUMENT_TYPE
Document
Type node type- TYPE_ELEMENT
Element node type
- TYPE_END_ELEMENT
Element end node type
- TYPE_END_ENTITY
Entity end node type
- TYPE_ENTITY
Entity node type
- TYPE_ENTITY_REFERENCE
Entity Reference node type
- TYPE_NONE
- TYPE_NOTATION
Notation
node type- TYPE_PROCESSING_INSTRUCTION
PI node type
- TYPE_SIGNIFICANT_WHITESPACE
Significant Whitespace node type
- TYPE_TEXT
Text
node type- TYPE_WHITESPACE
Whitespace node type
- TYPE_XML_DECLARATION
XML
Declaration node type
Attributes
The encoding for the document
A list of errors encountered while parsing
The XML
source
Public Instance Methods
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