Class: Peanuts::XML::LibXML::Reader
- Extended by:
- Forwardable
- Defined in:
- lib/peanuts/xml/libxml.rb
Constant Summary collapse
- SCHEMAS =
{:xml_schema => :schema, :relax_ng => :relax_ng}
- RD =
::LibXML::XML::Reader
- NODE_TYPES =
[ nil, :element, :attribute, :text, :cdata, :entity_reference, :entity, :processing_instruction, :comment, :document, :document_type, :document_fragment, :notation, :whitespace, :significant_whitespace, :end_element, :end_entity, :xml_declaration ].freeze
- DEFAULT_PARSER_OPTIONS =
{ :libxml_encoding => ::LibXML::XML::Encoding::UTF_8, :libxml_options => ::LibXML::XML::Parser::Options::NOENT }
Instance Method Summary collapse
- #close ⇒ Object
- #each ⇒ Object
- #find_element ⇒ Object
-
#initialize(source, source_type, options = {}) ⇒ Reader
constructor
A new instance of Reader.
- #node_type ⇒ Object
- #value ⇒ Object
Methods inherited from Reader
Constructor Details
#initialize(source, source_type, options = {}) ⇒ Reader
Returns a new instance of Reader.
106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 |
# File 'lib/peanuts/xml/libxml.rb', line 106 def initialize(source, source_type, = {}) super() = .dup @schema = .delete(:schema) @reader = case source_type when :string RD.string(source, parser_opt()) when :io RD.io(source, parser_opt()) when :uri RD.file(source, parser_opt()) when :document RD.document(source) else raise ArgumentError, "unrecognized source type #{source_type}" end @reader.send("#{SCHEMAS[schema.type]}_validate", schema.schema) if @schema end |
Instance Method Details
#close ⇒ Object
125 126 127 |
# File 'lib/peanuts/xml/libxml.rb', line 125 def close @reader.close end |
#each ⇒ Object
144 145 146 147 148 149 150 151 152 |
# File 'lib/peanuts/xml/libxml.rb', line 144 def each depth = self.depth if read while self.depth > depth yield self break unless next_sibling end end end |
#find_element ⇒ Object
154 155 156 157 158 159 |
# File 'lib/peanuts/xml/libxml.rb', line 154 def find_element until @reader.node_type == RD::TYPE_ELEMENT return nil unless read end self end |
#node_type ⇒ Object
131 132 133 |
# File 'lib/peanuts/xml/libxml.rb', line 131 def node_type NODE_TYPES[@reader.node_type] end |
#value ⇒ Object
135 136 137 138 139 140 141 142 |
# File 'lib/peanuts/xml/libxml.rb', line 135 def value case @reader.node_type when RD::TYPE_ELEMENT @reader.read_string else @reader.has_value? ? @reader.value : nil end end |