Ich bastle mir einen eigenen XML Parser, weiß aber nicht wie

Parantatatam

mag Cookies & Kekse
Hallo,

ich hoffe der Titel ist eindeutig genug gewählt. Jedenfalls sitze ich seit einiger Zeit daran mir eine eigene XML-Klasse zu basteln und da ich nicht nur Tags und CDATA-Elemente haben will fällt die Idee mit dem PHP-eigenen XML Parser auch raus. Ich will CDATA-Elemente gesondert sowie auch noch DTD und Kommentare analysieren. Meine Frage wäre nun: habt ihr Ideen oder Ratschläge wie ich mir am besten selbst einen eigenen Parser basteln könnte? Ich würde die Grundstruktur des XML Parsers übernehmen und dem entsprechend was analysiert wurde in verschiedene Typen (open, close, empty, comment, dtd, cdata, xml-declaration) unterteilen und dann eben noch Eigenschaften, Inhalt und Level. Versucht habe ich es schon damit, dass ich erstmal alles in einen gigantischen Array umwandle indem ich es einfach anhand der Kleiner-Als- und Größer-Als-Zeichen aufteile, was aber nicht die ideale Lösung ist. Also falls jemand von euch eine Idee hat, ich bin für jede anregende Idee dankbar.

Beispiel XML-Datei:
HTML:
<?xml version="1.0" encoding="ISO-8859-1"?>
<data>
 <tag1></tag1>
 <tag2 attr="attr2">
  <tag3 attr="attr1" />
 </tag2>
 <tag4>Inhalt</tag4>
 <!-- Kommentar -->
 <![CDATA[cdata]]>
</data>

Ergibt folgenden Array:
Code:
Array
 (
  [0] => Array
   (
    [tag] => xml
    [type] => xml-declaration
    [attributes] => Array
     (
      [version] => 1.0
      [encoding] => ISO-8859-1
     )

    [level] => 1
   )

  [1] => Array
   (
    [tag] => data
    [type] => open
    [level] => 1
   )

  [2] => Array
   (
    [tag] => tag1
    [type] => open
    [level] => 2
   )

  [3] => Array
   (
    [tag] => tag2
    [type] => open
    [attributes] => Array
     (
      [attr] => attr2
     )

    [level] => 2
   )

  [4] => Array
   (
    [tag] => tag3
    [type] => empty
    [attributes] => Array
     (
      [attr] => attr1
     )

    [level] => 3
   )

  [5] => Array
   (
    [tag] => tag2
    [type] => close
    [level] => 2
   )

  [6] => Array
   (
    [tag] => tag4
    [type] => open
    [value] => Inhalt
    [level] => 2
   )

  [7] => Array
   (
    [tag] => tag4
    [type] => close
    [level] => 2
   )

  [8] => Array
   (
    [type] => comment
    [value] => Kommentar
    [level] => 2
   )

  [9] => Array
   (
    [type] => cdata
    [value] => cdata
   )

  [10] => Array
   (
    [tag] => data
    [type] => close
   )

 )
 
Zuletzt bearbeitet:
Hi, warum willst du denn unbedingt das Rad neu erfinden?
Nimm doch einfach den XMLReader von PHP und bastel dir dann drumrum deine eigene Klasse, die ihn verwendet. Das bietet dir auf jeden Fall einen erheblichen Geschwindigkeitsvorteil und man kann damit eigentlich alles machen.

- Dokumentation XMLReader
 
Danke, dass ist genau das was ich gesucht habe, dass hilft mir auf jeden Fall weiter, danke. Wusste gar nicht das diese Klasse existiert. Werde jetzt nur noch schauen ob ich damit auch Kommentare, XML-Deklarationen und DTD auslesen kann.
 
Zurück