next up previous contents index
Search Next: XML erstellen Up: Beispiele Previous: Der sequenzielle Parser   Contents   Index


Der Baumparser

Beim Erzeugen des TreeParser-Objekts wird das komplette XML-Dokument eingelesen und steht danach zur freien Verfügung.

require 'nqxml/treeparser'

xmlstr=nil
xmlstr=File.open("Personen.xml") { |f| f.read}

begin
  doc = NQXML::TreeParser.new(xmlstr).document    
  ## Beispielcode hier einfügen
rescue NQXML::ParserError => ex
  puts "Fehler in Zeile #{ex.line}" +
    " bei Zeichen #{ex.column}: #{$!}"
end

Jeder Knoten im Baum hat folgende Attribute:

Daneben gibt es noch einige DOM-typische Funktionen:

Man wird relativ oft eine Möglichkeit benötigen, alle Knoten des Baumes nach einem bestimmten Element zu durchsuchen. Hier ist ein Iterator sinnvoll, der das Ablaufen des Baumes übernimmt und für jeden Knoten einen Codeblock aufruft, der die Abfragelogik enthält.

def traverse(node, &block)
  block.call(node)
  node.children.each{ |c|
    traverse(c, &block)
  }
end

## Beispielcode für obiges Listing
  traverse(doc.rootNode) { | node |
    if node.entity.instance_of?(NQXML::Tag)
      p node.entity.name
    end
  }

Attribute der Entities stehen in der Hashtabelle entity.attrs zur Verfügung.

  if node.entity.instance_of?(NQXML::Tag) && 
    node.entity.name=='name' &&
    node.entity.attrs['vorname']=='Anastasia'
    ...


next up previous contents index
Search Next: XML erstellen Up: Beispiele Previous: Der sequenzielle Parser   Contents   Index
(C) 2002 by dpunkt.de, Armin Roehrl, Stefan Schmiedl, Clemens Wyss 2002-01-20