+ Antworten
Ergebnis 1 bis 8 von 8

Thema: simplexml/DOM php 5

  1. #1
    TP-Senior counter18 macht alles soweit korrekt
    Registriert seit
    Jul 2003
    Ort
    B´tal
    Beiträge
    248

    simplexml/DOM php 5

    Hallo,

    ich habe ein Problem beim Darstellen, bzw. Bearbeiten von xml Dateien in php. Die Gesamte xml Datei, bzw. den obersten Eintrag kann ich darstellen lassen in php. Doch wenn es darum geht einzelne Punkte zu filtern, da hapert es. Ich habe Beispiele dabei die Funktionieren, doch mein eigenes, funktioniert leider nicht. Hier mal die Beispielscripts php/xml:
    test.xml
    Code:
      <?xml version="1.0" ?> 
    - <system>
    - <news>
      <id>2</id> 
      <title>News-System die 2.</title> 
      <author>KoMtuR</author> 
      <description>Wir lesen mehrere Datensaetze aus einer XML-Datei</description> 
      <date>1097688200</date> 
      </news>
    - <news>
      <id>1</id> 
      <title>News-System</title> 
      <author>KoMtuR</author> 
      <description>Wir bauen uns ein News-System mittels XML</description> 
      <date>1097688183</date> 
      </news>
      </system>
    Der dazugehörige php Code zum Auslesen der id1:
    PHP-Code:
    <?php 
    $doc 
    DOMDocument::load("test.xml"); 

    $xp = new domxpath($doc); 
    $titles $xp->query('news[id="1"]'); 
    foreach (
    $titles as $node) { 
        foreach(
    $node->childNodes as $cnode) { 
            if(
    $cnode->nodeType == 1) { 
                print 
    $cnode->nodeName .": "$cnode->textContent "\n"
            } 
        } 

    ?>
    Nun mein Teil, der leider nicht funktioniert. Er soll nach dem Link 1144915426, sortieren.

    inhalt.xml

    Code:
      <?xml version="1.0" ?> 
    - <rss version="2.0">
    - <channel>
      <title>Projekt News</title> 
      <link>http://.org/</link> 
      <description>Projekt</description> 
      <language>de</language> 
    - <item>
      <title>Jetzt</title> 
      <link>1144915426</link> 
      <description>10:03</description> 
      <category>oeffentlich</category> 
      <pubDate>13. April 2006</pubDate> 
      </item>
    - <item>
      <title>Test2005</title> 
      <link>1144914537</link> 
      <description>Text0815</description> 
      <category>privat</category> 
      <pubDate>13. April 2006</pubDate> 
      </item>
    </channel>
      </rss>
    Meine News.php:
    PHP-Code:
    <?php 
    $doc 
    DOMDocument::load("inhalt.xml"); 

    $xp = new domxpath($doc); 
    $titles $xp->query('item[link="1144915426"]'); 
    foreach (
    $titles as $node) { 
        foreach(
    $node->childNodes as $cnode) { 
            if(
    $cnode->nodeType == 1) { 
                print 
    $cnode->nodeName .": "$cnode->textContent "\n"
            } 
        } 

    ?>
    Weiss jemand woran das liegt? Ich habe alles durchsucht und versucht anzupassen, doch irgendwie funktioniert das nicht so ganz. Die Ergebnisseite ist leer. Die xml Datei muss so bleiben, da diese mit RSS 2.0 gelesen werden muss.

    Danke schon mal für alle Antworten...

  2. #2
    TP-Veteran Daniel N. ist auf einem guten Weg Avatar von Daniel N.
    Registriert seit
    Sep 2002
    Ort
    Schweiz
    Beiträge
    1.307
    hmm, probiers mal mit

    PHP-Code:
    $titles $xp->query('//item[@link_id="1144915426"]'); 
    wobei ein item nun so aussehen muss: <item link_id="1144915426"></item>

    müsste eigentlich gehen, hab aber simplexml verwendet. mir ist es eh ein rätsel wieso leute das beinahe undokumentierde dom für readonly dokumente brauchen. da ist simplexml wesentlich besser bedienbar, imho

    Passt auf, ich bin überheblich

    http://orangetree.ch-gnu.ath.cx

  3. #3
    TP-Member flo.s macht alles soweit korrekt
    Registriert seit
    Apr 2005
    Ort
    Oberbayern
    Beiträge
    59
    PHP-Code:
    <?php 
    $obj 
    simplexml_load_file('xml.xml');
    $arr $obj->xpath('//item[link = "1144914537"]');

    var_dump($arr);

    echo 
    "<br><br>";

    foreach (
    $arr as $node) { 
        foreach(
    $node as $cnode) {
            
    var_dump($cnode);
            echo 
    "<br>";
        }
    }
    ?>

    das sollte funktionieren - zumindest bei mir

    Flo

  4. #4
    TP-Senior counter18 macht alles soweit korrekt
    Registriert seit
    Jul 2003
    Ort
    B´tal
    Beiträge
    248
    Hi,
    danke für die Antworten.
    Ich habe diese Variante genommen:
    PHP-Code:
    $titles $xp->query('//item[@link_id="'.$id_bearbeiten.'"]'); 
    Die hat auch funktioniert. Ich habe auch simplexml für die Ausgabe genommen. Dies sollte für die Bearbeitung von xml da sein.

    Kennt jemand eine simplere und vielleicht übersichtlichere Variante xml bearbeiten zu können?

    Dies ist mein Script (Bin noch nicht so versiert in php)

    PHP-Code:
    <html> 
        <head> 
            <title></title> 
        </head> 
        <body> 
    <?php
     
    $edit 
    "description"
    $text $_POST["id_text"];
    $edit_content "$text";
    $id_bearbeiten $_POST["id_bearbeiten"];
    echo 
    $id_bearbeiten;
    $doc DOMDocument::load("inhalt.xml"); 

    switch(
    $edit) { 
        case 
    "description"
            
    $newtag $doc->createElement("description"); 
            
    $newtag_content $doc->createTextNode($edit_content); 
            
    $newtag->appendChild($newtag_content); 
            break; 
        default: 
            break; 


    $xp = new domxpath($doc); 
    $titles $xp->query('//item[@link_id="'.$id_bearbeiten.'"]'); 
    foreach (
    $titles as $node) { 
        foreach(
    $node->childNodes as $cnode) { 
            if(
    $cnode->nodeType == 1) { 
                if(
    $cnode->nodeName == $edit) { 
                    
    $cnode->parentNode->replaceChild($newtag$cnode); 
                } 
            } 
        } 

    echo 
    $doc->saveXML(); 
    $doc->save('inhalt.xml');
     
    echo
    '
    <form enctype="multipart/form-data" action="'
    .$_SERVER['PHP_SELF'].'" method="POST">
        <select name="id_bearbeiten">'
    ;
        
    $filename 'inhalt.xml'
         
        if(
    file_exists($filename)) { 
            
    $xml simplexml_load_file($filename); 
            if(
    $xml) { 
                foreach(
    $xml->channel->item as $item) { 
                echo
    '
                    <option value="'
    .$item->link.'">'.$item->link.'</option>'
                                                    } 
                    }
                                    }
    echo
    '
    </select><br>
        <textarea name="id_text" cols="40" rows="20"></textarea><br>
        <input type="submit" name="schritte" value="Neu_anlegen">

    </form>
        </body> 
    </html>'


    ?>

  5. #5
    TP-Veteran Daniel N. ist auf einem guten Weg Avatar von Daniel N.
    Registriert seit
    Sep 2002
    Ort
    Schweiz
    Beiträge
    1.307
    im standard-sprachumfang von php? nein, bedaure. und recht hast du: dom ist nicht gerade straight-forward

    aber schau dich doch mal im pear-repository um, dort hats jede menge xml-kram. http://pear.php.net

    Passt auf, ich bin überheblich

    http://orangetree.ch-gnu.ath.cx

  6. #6
    TP-Special Mod steffenk lebt für das TP und seine User steffenk lebt für das TP und seine User steffenk lebt für das TP und seine User steffenk lebt für das TP und seine User steffenk lebt für das TP und seine User steffenk lebt für das TP und seine User steffenk lebt für das TP und seine User steffenk lebt für das TP und seine User steffenk lebt für das TP und seine User Avatar von steffenk
    Registriert seit
    Feb 2005
    Ort
    Haan / NRW
    Beiträge
    12.869
    Ich verweise ungern drauf, aber das Tutorial ist gut:
    http://www.tutorials.de/forum/php-tu...l-und-dom.html


    TYPO3 · MySQLDumper · dislabs
    ·
    manche Mühlen mahlen schneller ...
    "Ich habe Rücken"
    Horst Schlämmer


  7. #7
    TP-Veteran Daniel N. ist auf einem guten Weg Avatar von Daniel N.
    Registriert seit
    Sep 2002
    Ort
    Schweiz
    Beiträge
    1.307
    wieso verweist du ungern drauf? auf tutorials.de? wenn ja, ACK

    Passt auf, ich bin überheblich

    http://orangetree.ch-gnu.ath.cx

  8. #8
    TP-Special Mod steffenk lebt für das TP und seine User steffenk lebt für das TP und seine User steffenk lebt für das TP und seine User steffenk lebt für das TP und seine User steffenk lebt für das TP und seine User steffenk lebt für das TP und seine User steffenk lebt für das TP und seine User steffenk lebt für das TP und seine User steffenk lebt für das TP und seine User Avatar von steffenk
    Registriert seit
    Feb 2005
    Ort
    Haan / NRW
    Beiträge
    12.869
    rischtisch


    TYPO3 · MySQLDumper · dislabs
    ·
    manche Mühlen mahlen schneller ...
    "Ich habe Rücken"
    Horst Schlämmer


+ Antworten

Aktive Benutzer

Aktive Benutzer

Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)

     

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51