Ankündigung

Einklappen
Keine Ankündigung bisher.

1. Knotenname eines XML-Dokuments mit SimpleXML

Einklappen

Neue Werbung 2019

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • 1. Knotenname eines XML-Dokuments mit SimpleXML

    Hallo,

    Ich würde gerne den ersten "Knotennamen" (heisst das so?) eines XML-Dokumentes auslesen. Ist dies mit SimpleXML möglich? Würdet ihr die "normalen" XML-Funktionen dafür nehmen (XML Parser Functions)? Oder wie checkt ihr XML-Dokumente auf die Verfügbarkeit eines Knotens? (Ich benutze PHP 5)

    Ein Beispiel:
    Code:
    <haus>
        <dach>rot</dach>
        <fenster>rund</fenster>
    </haus>
    Hier würde ich gerne "haus" auslesen.

    Besten Dank für eure Antworten

  • #2
    http://phpxmlclasses.sourceforge.net/

    wenn du dich hier mal umschaust findest du ganz nette Klassen inklusive Doku



    Wieso meinst du ist das "Fortgeschritten" ??

    Kommentar


    • #3
      (Thread verschoben, Doku lesen und bissl selbst recherchieren sollte als Fortgeschrittener drin sein )

      Kommentar


      • #4
        Ich habe schon recherchiert...

        Vielleicht kann mir einer erklären warum das funktioniert:
        PHP-Code:
        <?php

        $xml 
        simplexml_load_file('http://wordpress.org/development/feed/');

        $atom $xml->xpath('/feed');

        if (
        count($atom) == 1) {
            echo 
        'ATOM '$xml['version'];
        }


        $rss $xml->xpath('/rss');

        if (
        count($rss) == 1) {
            echo 
        'RSS '$xml['version'];



        ?>

        ?>
        PHP-Code:
        Ausgabe:
        RSS 2.0 
        und das nicht:
        PHP-Code:
        <?php

        $xml 
        simplexml_load_file('http://wordpress.org/development/feed/atom/');

        $atom $xml->xpath('/feed');

        if (
        count($atom) == 1) {
            echo 
        'ATOM '$xml['version'];
        }


        $rss $xml->xpath('/rss');

        if (
        count($rss) == 1) {
            echo 
        'RSS '$xml['version'];



        ?>
        PHP-Code:
        Ausgabe
        Besten Dank

        EDIT: Was stimmt an diesem BBCode nicht?

        Edit Zergling:
        - BBCode Tags code und php dürfen nich gemischt werden, habs geändert

        Kommentar


        • #5
          da wird wohl was in der XML was falsch sein weil de rCode ist doch soweit ich seh der gleiche ... ??!!

          Kommentar


          • #6
            http://code.blogspot.com/atom.xml

            geht auch nicht

            Wie würdet ihr hier vorgehen, um das doch zu testen?

            Kommentar


            • #7
              error_reporting(E_ALL);

              Kommentar


              • #8
                Gibt bei mir leider nichts aus!

                Kommentar


                • #9
                  Zitat von Clue
                  ... und das nicht:
                  Das sind zwei unterschiedliche Files. Im 2. File gibt es keinen Knoten namens rss.

                  EDIT:
                  diese Antwort ist leider falsch.

                  Kommentar


                  • #10
                    ich weiss, aber es gibt einen Knoten feed!

                    Kommentar


                    • #11
                      Zitat von Clue
                      ich weiss, aber es gibt einen Knoten feed!
                      Ein wenig gefummelt:
                      Der 'feed' Knoten beinhaltet Syntaxfehler in der Deklaration. SimpleXML nimmt ihn deshalb nicht für voll...

                      Einfach mal auf feed 0.4 warten. <g>

                      Kommentar


                      • #12
                        Das ist jedoch nicht so gut (Was ist den genau der Fehler?)
                        Gibt es keine Möglichkeiten das zu umgehen? Ich brauche auch nachher noch feed 0.3 (abwärtskompitabilität)

                        Kommentar


                        • #13
                          Zitat von Clue
                          Das ist jedoch nicht so gut (Was ist den genau der Fehler?)
                          So müßte der Node aussehen:
                          Code:
                          <feed version="0.3" 
                          xmlns:content="http://purl.org/atom/ns" 
                          xmlns:dc="http://purl.org/dc/elements/1.1/" 
                          xml:lang="en">
                          Gibt es keine Möglichkeiten das zu umgehen? Ich brauche auch nachher noch feed 0.3 (abwärtskompitabilität)
                          Warum willst Du das umgehen? Der URL liefert fehlerhaftes XML.

                          Ob es nun an feed 0.3 oder doch eher am Script von wordpress.org, müßte doch zu klären sein.

                          Kommentar


                          • #14
                            Zitat von ignatz
                            Warum willst Du das umgehen? Der URL liefert fehlerhaftes XML.

                            Ob es nun an feed 0.3 oder doch eher am Script von wordpress.org, müßte doch zu klären sein.
                            http://www.atompub.org/rfc4287.html#rfc.section.1.1 und diese Beispiele funktionieren nicht.

                            Ich möchte das umgehen, da ich nicht jeden Feed von hand bearbeiten kann

                            Besten Dank

                            EDIT: ganz vergessen, dir für dein "<feed ..." zu danken (aber eben, ich kann nicht alle von hand nachbessern...). Darum suche ich nach einer automatischen Lösung...

                            Kommentar


                            • #15
                              Das "Problem" ist der vergebene Namensraum. In der Version von Ignatz wurde ein Präfix angegeben
                              xmlns:content="http://purl.org/atom/ns"
                              bei http://code.blogspot.com/atom.xml fehlt dies. Sehr schade, da man das Präfix leicht bei XPath angeben kann. /content:feed unbd fertig

                              Ohne Präfix kenne ich nur den Umweg über local-name(). Aber das wirkt so unelegant, dass es dafür eine bessere Lösung geben muss.

                              PHP-Code:
                              <?php
                              error_reporting
                              (E_ALL); ini_set('display_errors'true);

                              $doc = new DOMDocument();
                              $doc->load('http://code.blogspot.com/atom.xml');


                              $feed $doc->documentElement;
                              echo 
                              'tagName: '$feed->tagName"
                              \n"
                              ;
                              echo 
                              'prefix: '$feed->prefix"
                              \n"
                              ;
                              echo 
                              'namesapceURI:'$feed->namespaceURI"
                              \n"
                              ;


                              $xpath = new DOMXPath($doc);
                              $result $xpath->query('/feed');
                              echo 
                              '/feed -> '$result->length"
                              \n"
                              ;

                              $result $xpath->query('//*[local-name()=\'feed\']');
                              echo 
                              '/*:feed -> '$result->length"
                              \n"
                              ;
                              ?>

                              Kommentar

                              Lädt...
                              X