DOM - XML / HTML Laden

  • DOM - XML / HTML Laden

    Moin.

    Problem: Ich muss XML Dateien Laden, welche aber nicht immer zwingend Syntax-mäßig korrekt sind. Daher nutze ich:

    Quellcode

    1. DOM::loadHtml( str $source );


    geht auch soweit ganz gut, nur leider erzeugt diese Methode automatisch HTML-Tags.
    Wenn ich als String z.B.:

    Quellcode

    1. 'peter pan'


    angebe erzeugt er mir folgenden Baum:

    Quellcode

    1. <body><p>peter pan</p></body>


    Hier hab ich ein Debug Script gemacht womit man dies gut sehen kann:

    Quellcode

    1. $D = new DOMDocument;
    2. $D->loadHtml('ff bl<br/> a');
    3. function showR( DOMNodeList $childs, $dim =0 ) {
    4. foreach ($childs as $child) {
    5. printf('%s %s <br/>'."\n", str_repeat('.', $dim), $child->nodeName);
    6. ($l = $child->childNodes) instanceof DOMNodeList ?
    7. showR( $l, $dim +1)
    8. :null;
    9. }
    10. }
    11. showR($D->documentElement->childNodes);
    Alles anzeigen


    Erzeugt:

    Quellcode

    1. body
    2. . p
    3. .. #text
    4. .. br
    5. .. #text


    Wenn man aber nun Zeile 2 in:

    Quellcode

    1. $D->loadHtml('ff bl<br/> a');


    aender wird folgendes erzeugt:

    Quellcode

    1. body
    2. . #text
    3. . br
    4. . #text


    -----------------------------------------------------------------------------------

    Mein Problem ist dieses automatische erzeugen von Elementen.
    mit loadHTML kann man wunderbar auch "zerstueckeltes" HTML laden, nur nervt dieses erzeugen von <body> und <p> Elementen.

    Gibt es irgendeine Möglichkeit dies zu unterbinden?
  • Hm,

    HTML und XML sind ja im Prinzip sehr ähnlich. Deswegen auch Markup Language.
    Eigentlich müsste es auch mit der SImpleXMLElement Klasse gehen: de.php.net/manual/de/book.simplexml.php.

    Funktionieren tut das so:

    Quellcode

    1. $xmlElem = new SimpleXMLElement('<irgendein_tag>wurst<br>blabla</irgendein_tag>');


    Mit "print_r" kannste dir das mal anschauen. Trotzdem, so gehts dann:

    Quellcode

    1. $xmlStr <<<EOT
    2. <text><sub>blabla</sub></text>
    3. <text>lalal</text>
    4. EOT;
    5. $xmlElem = new SimpleXMLElement();
    6. $text1 = $xmlElem->text[0]->sub;
    7. $text2 = $xmlElem->text[1];


    Hoffe das hilft :D