Parser

Der XML-Parser ist für die Übersetzung eines XML-Dokumentes in Objektstruktur verantwortlich. In dem folgenden Beispiel wird die XML Zeichenkette in XML-Objekte umgewandelt. Jeder Knoten ist dabei von Typ \Alvine\Xml\Element.

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<verzeichnis>
     <titel>Wikipedia Städteverzeichnis</titel>
     <eintrag>
          <stichwort>Genf</stichwort>
          <eintragstext>Genf ist der Sitz von ...</eintragstext>
     </eintrag>
     <eintrag>
          <stichwort>Köln</stichwort>
          <eintragstext>Köln ist eine Stadt, die ...</eintragstext>
     </eintrag>
</verzeichnis>
$parser=new \Alvine\Xml\Parser;
$doc=$parser->parseXML($xml);  // siehe oben


$node=$doc->getChildren()->getChildren()
    ->find(new \Alvine\Types\Node\Constraint\Name('stichwort'))
    ->current();

echo $node->getClass();
// -> \Alvine\Xml\Element

Um einzelnen Elemente eine besondere Bedeutung zu geben, kann dem Parser ein Suchnamensraum übergeben werden. In diesem Beispiel hat die Node nicht mehr den Typ \Alvine\Xml\Element, sondern \My\Name\Space\Stichwort.

Dadurch kann ein XML-Dokument mit Semantik erweitert werden.

namespace My\Name\Space;

class Stichwort extends \Alvine\Xml\Element {

}

Diese Klasse wird nun beim Parsen einer XML Struktur verwendet. Dabei wird in den zum Parser hinzugefügten Namespaces nach einer Klasse mit dem Namen des Tag gesucht. Im Falle dieses Dokuments wird nach den folgenden Klassen gesucht.

  • MyNameSpaceVerzeichnis
  • MyNameSpaceTitel
  • MyNameSpaceEintrag
  • MyNameSpaceStichwort
  • MyNameSpaceEintragstext

Da in diesem Beispiel nur die Klasse \My\Name\Space\Stichwort definiert wurde, sind, bis auf die Stichwort-Node, alle anderen Nodes vom Type \Alvine\Xml\Element.

$parser=new \Alvine\Xml\Parser;
$parser->addSearchNamespace('\\My\\Name\\Space');
$doc=$parser->parseXML($xml);

$node=$doc->getChildren()->getChildren()
    ->find(new \Alvine\Types\Node\Constraint\Name('stichwort'))->current();
echo $node->getClass();
// -> \My\Name\Space\Stichwort

Die Stichwort-Node ist vom Typ \My\Name\Space\Stichwort.

Über diesen Mechanismuss lassen sich verschiedene Logiken abbilden.