XML-Parser, Zugriff auf das Attribut

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

  • XML-Parser, Zugriff auf das Attribut

    Hallo,

    bin etwas verzweifelt.
    Ich will in der Foreach-Schleife ganz unten auch noch das Attribut ausgeben,
    aber ich kriege das nicht hin. Ich hab schon alles Mögliche gefunden,
    bin ja schon froh, allein so weit gekommen zu sein.

    Im Grunde will ich also nur noch bei einer XML Zeile wie dieser:

    <iw:land iso_land="DEU"/>

    eben "DEU" ausgeben, bzw. in eine Variable speichern.

    PHP-Code:
    global $x;
    $x=1;

    $file "20071025114019.xml";
    $feed = array();
    $key "";
    $info "";


    function 
    startElement($xml_parser$attrs)
        {
              global 
    $feed;
        if (
    count($attribs)) {
            foreach (
    $attrs as $k => $v) {
                echo 
    "<b>Namek: $k attribut: $v </b>";
            }
        }
           }

    function 
    endElement($xml_parser$name)
        {
            global 
    $x;
            
    $z $x++;
              global 
    $feed$info;
               
    $key $name.$z;
               
    //echo $key;
              
    $feed[$key] = $info;
              
    $info "";
          }

    function 
    charData($xml_parser$data )
        {
              global 
    $info;
              
    $info .= $data;
           }

    $xml_parser xml_parser_create();
    xml_parser_set_option$xml_parserXML_OPTION_SKIP_WHITE);
    xml_set_element_handler($xml_parser"startElement""endElement");
    xml_set_character_data_handler($xml_parser"charData" );
    $fp fopen($file"r");
    while (
    $data fread($fp4096))
    !
    xml_parse($xml_parser$datafeof($fp));
    xml_parser_free($xml_parser);

    //global $arrayzaehler, $array;

    $arrayzaehler=0;

        foreach(
    $feed as $key => $wert)
        {
        echo 
    "Das Element \"".$key."\" hat den Wert \"".$wert."\"...";
        
    $array[$arrayzaehler]=trim($wert);
        
    $arrayzaehler++;
        } 
    So, daß im letzten Echo steht:

    echo "Das Element \"".$key."\" hat den Wert \"".$wert."\" und das Attribut ".$attrib;


    Ich war schon auf

    http://www.tutorials.de/forum/php-tu...l-und-dom.html
    http://www.professionelle-softwareen...simplexml.html

    und hab mir das Manual bei php.net angeschaut.

    Ich hab die Attribute sogar schon ausgelesen gekriegt, irgendwo
    war ein sehr gutes Script, bei dem alles ausgelesen wurde.

    Aber irgendwie krieg ich es nicht in die Schleife mit rein.
    Das Script oben ist die letzte lauffähige Version, die ich natürlich
    auch aus Manual und Beispielen zusammengestückelt habe...
    Gruß, Coni
    ~~ codito ergo sum - ich code, also bin ich! ~~

  • #2
    Wieso benutzt kein Mensch die DOM-Funktionen??
    Aber ein Blick ins Manual hilft:
    The function named by start_element_handler must accept three parameters: start_element_handler ( resource $parser, string $name, [color=red]array $attribs[/color] )
    (...)
    The third parameter, attribs, contains an associative array with the element's attributes (if any).The keys of this array are the attribute names, the values are the attribute values.Attribute names are case-folded on the same criteria as element names.Attribute values are not case-folded.

    The original order of the attributes can be retrieved by walking through attribs the normal way, using each().The first key in the array was the first attribute, and so on.

    Anmerkung: Anstelle eines Funktionsnamens kann auch ein Array mit einer Objekt-Referenz und dem Namen einer Methode angegeben werden.

    Kommentar


    • #3
      Hab ich auch gefunden.
      Aber aufm Server läuft leider nur PHP4 und bei der Version steht dick drüber:


      Warnung

      Diese Erweiterung ist EXPERIMENTELL. Das Verhalten dieser
      Erweiterung, einschließlich der Funktionsnamen, und alles Andere was
      hier dokumentiert ist, kann sich in zukünftigen PHP-Versionen ohne
      Ankündigung ändern. Seien Sie gewarnt und verwenden Sie diese
      Erweiterung auf eigenes Risiko.
      Also hab ich es halt versucht so hinzukriegen...
      Gruß, Coni
      ~~ codito ergo sum - ich code, also bin ich! ~~

      Kommentar


      • #4
        Mit der 4er Version ist natürlich nix mit DOM
        Hat mein Hinweis auf den dritten Parameter denn was geholfen?

        Kommentar


        • #5
          Ja, das das wußte ich aber bereits.
          Wie gesagt, habe mit einem anderen Script schon alles ausgelesen gekriegt.
          Aus dem hab ich mir zum Teil auch das vorliegende zusammengebastelt.

          Ich kriege das nur nicht in meine untere foreach eingebaut.
          Wo in $attribs sind die gesuchten Daten?

          Hab schon solche Sachen ausprobiert: $attribs[0][0] nur um mal zu sehen,
          wo da überhaupt was drin steht. Mit print_r hab ich es ausgegeben,
          aber das hat mich mehr verwirrt...

          Ich weiß einfach nicht, wie ich an dieser Stelle die gewünschten Daten
          raushole!

          EDIT:

          Und dann hab ich noch das Problem mit den HTML-Tags im XML...
          <![CDATA[Hallo<br>test]]>
          Macht keinen Umbruch sondern gibt Hallo<br>test aus!!
          Da probier ich aber noch ein wenig mit rum, ist hier wahrscheinlich
          eh der falsche Thread....

          Zuletzt geändert von Coniaric; 06.11.2007, 23:54.
          Gruß, Coni
          ~~ codito ergo sum - ich code, also bin ich! ~~

          Kommentar


          • #6
            Zwei Fehler in deiner Funktion startElement:
            - $attribs ist nirgends definiert, du meinst wahrscheinlich $attrs
            - in der foreach-Schleife solltest du die Attribute in $feed speichern

            Kommentar


            • #7
              Deine Funktion:
              PHP-Code:
              startElement($xml_parser$attrs
              Die geforderte Funktion, aus dem Manual:
              PHP-Code:
              start_element_handler $parser$name$attribs 
              Entdeckst du Unterschiede?? (Außer, dass die Funktionen anders heißen!)

              Kommentar


              • #8
                Guten Morgen!

                Okay, hier mal ein Zwischenstand.
                Hab jetzt

                PHP-Code:
                start_element_handler $parser$name$attribs 
                entsprechend geändert und überall die Variablen angeglichen.

                Hab ich das Manual richtig verstanden, daß es bei
                start_element_handler ($parser, $name)
                nur zwei Argumente gibt in der Klammer?

                Jedenfalls hab ich jetzt meine Ausgabe.
                Jetzt muß ich "nur" noch irgendwie an die Attribute drankommen...

                Bisher sieht es so aus:

                PHP-Code:
                global $x;
                $x=1;

                $file "20071025113254.xml";
                $feed = array();
                $key "";
                $info "";


                function 
                start_element_handler $parser$name$attribs )
                    {
                //    print_r ($attrs);echo"<br>";
                          
                global $feed;
                  
                //  if (count($attribs)) {
                 //       foreach ($attribs as $k => $v) {
                 //           echo "<b>Namek: $k attribut: $v </b>";
                  //      }
                  //  }
                       
                }

                function 
                end_element_handler $parser$name )
                    {
                        global 
                $x;
                        
                $z $x++;
                          global 
                $feed$info;
                           
                $key $name.$z;
                           
                //echo $key;
                          
                $feed[$key] = $info;
                          
                $info "";
                      }

                function 
                charData($parser$data )
                    {
                          global 
                $info;
                          
                $info .= $data;
                       }

                $parser xml_parser_create();
                xml_parser_set_option$parserXML_OPTION_SKIP_WHITE);
                xml_set_element_handler($parser"start_element_handler""end_element_handler");
                xml_set_character_data_handler($parser"charData" );
                $fp fopen($file"r");

                while (
                $data fread($fp4096))
                !
                xml_parse($parser$datafeof($fp));
                xml_parser_free($parser);


                $arrayzaehler=0;

                    foreach(
                $feed as $key => $wert)
                    {
                    echo 
                "Das Element \"".$key."\" hat den Wert \"".$wert."\"...";
                    } 
                Ist $feed jetzt ein 3-Dimensionales array, wenn die Attribute drin sind?
                Oder muß ich die Kommentare um die obere foreach wegmachen und
                dort die Attribute irgendwie reinwurschteln?
                Oder bin ich völlig auf dem Holzweg?

                EDIT:

                OffTopic:
                Ist Euch eigentlich aufgefallen, daß der Erotik-Banner
                da oben auf eine .asp-Seite verweist?


                Zuletzt geändert von Coniaric; 07.11.2007, 10:44.
                Gruß, Coni
                ~~ codito ergo sum - ich code, also bin ich! ~~

                Kommentar


                • #9
                  Wie wär es mit Testausgaben. Wir sind doch nicht deine Ferndebugger!

                  Kommentar


                  • #10
                    Hab ich ja gemacht, mit

                    print_r ($feed);

                    Aber da sind keine Attribute drin...

                    Gerade hänge ich sowieso noch an der foreach, leider können
                    auch mehrere Datensätze in einem XML stehen und
                    da die $key irgendwie automatisch durchnummeriert wird, weiß
                    ich noch nicht so genau, wie ich feststellen kann, wann
                    sich ein Datensatz wiederholt...

                    Hab langsam echt die Schnauze voll von dem Mist.

                    Was würde es ungefähr kosten, wenn das jemand fertig macht?
                    (Kommt das in Scriptgesuche?)

                    Es müßten praktisch die Daten aus dem XML in bestimmte Variablen
                    geschrieben werden und das ganze dann in eine fertige MySQL-Datenbank.
                    Auf dem Server läuft PHP4.4.4

                    EDIT:
                    ach ja und die Bilder, deren Pfad auch in der XML definiert ist, in 3 verschiedene Größenvarianten geändert und umbenannt werden.
                    Zuletzt geändert von Coniaric; 07.11.2007, 11:31.
                    Gruß, Coni
                    ~~ codito ergo sum - ich code, also bin ich! ~~

                    Kommentar


                    • #11
                      Bei mir kostet das 200 Euro, Zusage nach Zusendung einer exemplarischen XML-Datei und Absprache der Nebenbedingungen, Lieferung inkl. Rechnung max. 24h später.

                      OffTopic:
                      Ist Euch eigentlich aufgefallen, daß der Erotik-Banner
                      da oben auf eine .asp-Seite verweist?

                      Jetzt wo du es sagst, fällt mir auf wie gut mein Adblocker arbeitet.

                      Kommentar


                      • #12
                        Hallo,

                        ich bastle gerade selber noch dran rum. Es brennt aber und muß nächste Woche fertig sein. Falls ich es nicht hinkriege bis dahin - kannst Du mir eine EMailadresse geben oder sowas?
                        Rechnungen kannst Du stellen hast Du angedeutet?
                        Gruß, Coni
                        ~~ codito ergo sum - ich code, also bin ich! ~~

                        Kommentar

                        Lädt...
                        X