Ankündigung

Einklappen
Keine Ankündigung bisher.

Mit XMLReader haarige XML auslesen

Einklappen

Neue Werbung 2019

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

  • Mit XMLReader haarige XML auslesen

    Hallo.
    Als erstes vor ab:
    Nikosch nicht gleich wieder als Trash markieren den Threat. Ich habe die Suchfunktion logischer weise der Forums benutzt. Aber die Leute, die vor 2 bzw. 1 Jahr den XMLReader benutzt haben, haben Funktionen benutzt, die jetzt nicht mehr zur Verfügung stehen.

    Also folgendes:
    Ich will eine recht nicht gut durchdachte XML Lesen! und danach die jeweiligen Werte einfach in eine Datenbank schreiben.
    Vorerst mal ein Pic von der XML, damit Ihr euch ein Bild machen könnt.
    http://img59.imageshack.us/img59/7067/unbenanntugh.jpg
    So mir geht es darum, das OS, Servicepack, Benutzernamen etc.
    auszulesen. Ergo die Value.

    Mein Gedankengang ist also, Wenn ich den richtigen Title anspreche, kann ich mir auch den dazugehörigen Value ziehen. Allerdings kriege ich keinen Einzigen Wert ausgelesen.
    Wollte mal testweise alle Values auslesen. habe dazu das hier geschrieben:
    PHP-Code:
    <?php
    $dir 
    'S:\software\externeSoftware\anwendungen\Netzwerk\aida32\report\XML';

    $xmlreader = new XMLReader();
            
        if(!
    $xmlreader->XML($dir))
        {
            echo 
    'XML nicht vorhanden!!!';
        }
        else
            if (!
    $xmlreader->open($dir.'\PC_SEELIG2.xml'))
                    echo 
    'Datei konnte nicht geöffnet werden';
                else
                {
                    while (
    $xmlreader->read())
                    {
                        
    $os = array($xmlreader->getAttribute('Value'));
                        
                        
    print_r($os); echo "<br />";
                    }
                }

    ?>
    Die Ausgabe ist aber folgende:
    Array ( [0] => )
    Array ( [0] => )
    Array ( [0] => )
    etc. Allerdings keine Endlosschleife.

    Kann mir da mal einer behilflich sein?
    sigpic


  • #2
    PHP-Code:
    $xmlreader->getAttribute('Value'
    getAttribute() liefert nur Attribute (das sind die Dinger, die innerhalb eines Tags stehen: <xml_tag attr1="attribut val 1" attr2="...">[data]</xml_tag>

    versuch mal readString() oder readInnerXML() um an [data] zu kommen
    Über 90% aller Gewaltverbrechen passieren innerhalb von 24 Stunden nach dem Konsum von Brot.

    Kommentar


    • #3
      So ich bin ein wenig weiter gekommen.
      PHP-Code:
      while ($xmlreader->read())
      {
          if (
      $xmlreader->readString() == "Betriebssystem")
              echo 
      "OS<br />";

      Allerdings wird mir jetzt 4 mal das Wort OS rausgeschmissen, obwohl es nur 2 mal in dem XML Document vorkommt.

      OK. readInnerXml löst das Problem.

      Wie kriege ich aber jetzt denn dazugehörigen Wert raus.
      Ich befinde mich ja, wenn ich das aufrufe:
      PHP-Code:
      if ($xmlreader->readInnerXml() == "Betriebssystem"
      schon in dem, in meinem Fall, richtigem <Item></Item>
      ich brauche nur den dazugehörigen Value.
      Code:
      <Item>
                 <Title>Betriebssystem</Title>
                 <Icon>38</Icon>
                 <Value>Microsoft Windows 2000 Professional 5.0.2195 (Win2000 Retail)</Value>
      </Item>
      sigpic

      Kommentar


      • #4
        Ich frage mich gerade, ob mein problem überhaupt mit XMLReader lösbar ist. Ich habe in meiner XMl nur Elemente und kein stück Attribute.
        Wenn ich mir die Funktionen so angucke werde ich da schwer mit zu kämpfen haben.
        Womit sollte ich so eine XML auslesen? Könnt ihr was empfehlen?

        EDIT:
        Nehme alles zurück. Bin nochmals in mich gegangen und habe es doch gelöst bekommen.
        Allerdings habe ich noch ein Problem.

        Erstmal der richtige Code:
        PHP-Code:
        while ($xmlreader->read())
        {
            if (
        $xmlreader->readInnerXml() == "Betriebssystem")
            {
                
        $xmlreader->next('Value');
                
        $os $xmlreader->readInnerXml();
                echo 
        $os;
            }

        Jetzt ist es nur so, da das OS 2 mal vorkommt, bekomme ich es auch 2 mal ausgegeben.
        Kann ich es irgendwie hinbekommen, dass das Lesen im Prinzip nach dem ersten finden aufhört?
        sigpic

        Kommentar


        • #5
          Wenn du nur Bruchstücke brauchst, finde ich XPath am angenehmsten.
          "Mein Name ist Lohse, ich kaufe hier ein."

          Kommentar


          • #6
            Mit Xpath komme ich gar net klar.
            Gibt es denn ähnliche Parser für .txt dateien?
            sigpic

            Kommentar


            • #7
              dann nimm halt die umständliche Methode ...

              PHP-Code:
              $erfolg=0;
              while (
              $xmlreader->read())
              {
                  if (
              $xmlreader->readInnerXml() == "Betriebssystem")
                  {
                      
              $xmlreader->next('Value');
                      
              $os $xmlreader->readInnerXml();
                      echo 
              $os;
                      
              $erfolg=1;
                  }
                  if (
              $erfolg==1)
                     break;

              "Irren ist männlich", sprach der Igel und stieg von der Drahtbürste

              Kommentar


              • #8
                ok. Erstmal danke an alle. Werde es shcon iwie hinbekommen
                sigpic

                Kommentar

                Lädt...
                X