shift8

Innovative Konzepte

SimpleXML vs. CDATA & Attributes

Seit einiger Zeit ist es relativ einfach geworden, mithilfe von Php Xml Dateien zu verarbeiten – eine davon ist simple_xml. Die Handhabung ist wahnsinnig simple – daher auch der Name. Im Verlauf meiner Arbeit bin ich jedoch auf ein Problem gestoßen.

Meine Xml-Datei ist well-formed und liegt im utf-8 Format vor und wird auch problemlos eingelesen. Hier die Struktur der Datei als reduziertes Beispiel:

<a>
   <b>
      <c>
         <d label="Firma" marker="Automobil" period="Sommer">
            <[CDATA[This is the cdata part]]>
         </d>
      </c>
   </b>
</a>

Diese Datei lade ich mit:

$this->xmlData = simplexml_load_file('test.xml', NULL, LIBXML_NOCDATA);

So bekomme ich alle CDATA Inhalte, jedoch nicht mehr alle Attribute.

Lade ich die Datei mit:

$this->xmlData = simplexml_load_file('test.xml');

Bekomme ich alle Attribute, jedoch keine CDATA Inhalte.

Um alle Inhalte zu erhalten, ist dieser Weg nötig:

Die XML Datei mit der Option ‘LIBXML_NOCDATA’ laden, um die CDATA Inhalte zu erreichen. Auch wenn diese noch nicht über ‘print_r’ oder ‘var_dump’ sichtbar sind, so sind diese bereits im Simple_xml Objekt enthalten. Um diese Werte anzuzeigen, den gewünschten Knoten mittels ‘var_dump’ anzeigen.

var_dump($this->xmlData->b->c->d)

Dies ist bereits als Bug erfasst und beruht darauf, das das SimpleXML Objekt überladen wird.

Weitersagen:
  • Digg
  • Sphinn
  • del.icio.us
  • Facebook
  • Mixx
  • Google Bookmarks
  • DotNetKicks
  • Live
  • MisterWong
  • MySpace
  • Reddit
  • Webnews.de
  • Technorati
  • Yahoo! Bookmarks

Erschienen in: Freizeit

Antworten