Ankündigung

Einklappen
Keine Ankündigung bisher.

Frage zu simpleXML

Einklappen

Neue Werbung 2019

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

  • Frage zu simpleXML

    Hallo,
    ich spiele seit kurzem mit PHP herum, nur leider bin ich auf ein Problem gestoßen das ich nicht lösen kann.
    Ich habe eine XML-Datei (Adressbuch) welche ich mit PHP auslesen und dann in einer Tabelle ausgeben möchte. Das klappt aber bisher nur teilweise. Die XML-Datei sieht folgendermaßen aus:

    Code:
    <?xml version='1.0' encoding='utf-8' standalone='yes'?>
    <contacts>
    	<contact>
    		<name>Fritz</name>
    		<phone_number>
    			<value>1234</value>
    		</phone_number>
    	</contact>
    	<contact>
    		<name>Hans</name>
    		<phone_number>
    			<value>2345</value>
    		</phone_number>
    	</contact>
    	<contact>
    		<name>Bruno</name>
    		<phone_number>
    			<value>3456</value>
    		</phone_number>
    	</contact>
    	<contact>
    		<name>Fred</name>
    		<phone_number>
    			<value>4567</value>
    		</phone_number>
    		<phone_number>
    			<value>5678</value>
    		</phone_number>
    		<phone_number>
    			<value>6789</value>
    		</phone_number>
    	</contact>
    </contacts>
    Wie man sieht hat Fred mehrere Telefonnummern. Mein Script gibt aber pro Name nur eine Telefonnummer aus. Wie bekomme ich es hin, daß hinter Fred die drei Telefonnummern erscheinen?
    Hier mein Script:
    PHP-Code:
    <?php

    $file 
    $_FILES['Inhalt']['tmp_name'];

    $xml simplexml_load_file($file);

    echo
    '<table border="1" width="100%"><th colspan="3" align="left"><h1>Telefonbuch</h1></th>';
        echo
    '<tr><td width="3%"><b>Nr.</b></td><td><b>Gespeicherter Name</b></td><td><b>Rufummer</b></td>';
        
    $count=1;
            foreach (
    $xml->contact as $contact)
                {
                echo
    '<tr><td width="3%">'.$count++.'</td><td>'.$contact->name.'</td><td>'.$contact->phone_number->value.'</td>';
                }
    echo
    '</table><br>';



    ?>
    Ich hab leider bisher keine Lösung meines Problem gefunden.
    Gruß
    Martin


  • #2
    Du hast auch mehrere Kontakte und schaffst es, diese der Reihe nach auszulesen. Das kannst du doch auf die Telefonnummern übertragen.
    http://hallophp.de

    Kommentar


    • #3
      Schau Dir mal Dein $xml mit print_r() an.
      Vielleicht fällt Dir dann was auf...
      Competence-Center -> Enjoy the Informatrix
      PHProcks!Einsteiger freundliche TutorialsPreComposed Packages

      Kommentar


      • #4
        Erstmal danke für die Denkanstöße. Beim Einbau eines print_r($contact) habe ich festgestellt, daß die Value-Werte mit 0, 1 und 2 bezeichnet sind.
        Mit folgendem Script sieht es nun fast so aus wie ich es haben will:

        PHP-Code:
        <?php

        $file 
        $_FILES['Inhalt']['tmp_name'];

        $xml simplexml_load_file($file);

        echo
        '<table border="1" width="100%"><th colspan="3" align="left"><h1>Telefonbuch</h1></th>';
            echo
        '<tr><td width="3%"><b>Nr.</b></td><td><b>Gespeicherter Name</b></td><td><b>Rufummer</b></td>';
            
        $count=1;
                foreach (
        $xml->contact as $contact)
                    {
                    print
        '<tr><td width="3%">'.$count++.'</td><td>'.$contact->name.'</td><td>'.$contact->phone_number[0]->value.'<br>'.$contact->phone_number[1]->value.'<br>'.$contact->phone_number[2]->value.'</td>';
                    }
        echo
        '</table><br>';

        ?>
        An der Darstellung muß ich noch etwas feilen.

        An eine weitere Foreach-Schleife unterhalb der Contact-Foreach-Schleife habe ich auch gedacht. Diese zeigt bei mir allerdings nichts oder alle Telefonnummern an. Da muß ich noch etwas rumprobieren.
        Ich bitte um Nachsicht, bin wirklich gerade erst angefangen.

        Kommentar


        • #5
          Ja, die Schleife wäre die richtige Wahl.
          Code:
          $contact->phone_number
          sollte das Array sein, dass deine Telefonnummern enthält.

          Tipp: Bei der Auflistung der Telefonnummern solltest du dich für eine HTML-Liste entscheiden und auf <br /> - Tags verzichten.
          http://hallophp.de

          Kommentar


          • #6
            Die Tabelle sieht nun so aus wie ich sie haben wollte. Vielen Dank hierfür an die Helfer.

            PHP-Code:
            <?php

            $file 
            $_FILES['Inhalt']['tmp_name'];

            $xml simplexml_load_file($file);

            echo
            '<table border="1" width="100%"><th colspan="3" align="left"><h1>Telefonbuch</h1></th>';
                echo
            '<tr><td width="3%"><b>Nr.</b></td><td><b>Gespeicherter Name</b></td><td><b>Rufummer</b></td>';
                
            $count=1;
                    foreach (
            $xml->contact as $contact)
                        {
                        echo
            '<tr><td width="3%">'.$count++.'</td><td>'.$contact->name.'</td>';
                            {
                            echo 
            '<td>';
                            foreach (
            $contact->phone_number as $phone_number)
                                    {
                                    echo 
            '<dt>'.$phone_number->value.'</dt>';
                                    }
                            echo 
            '</td></tr>';
                            }
                        }
            echo
            '</table><br>';

            ?>
            Ob es die eleganteste Lösung ist weiß ich nicht, aber es funktioniert.
            Gruß und Dank
            Martin

            Kommentar


            • #7
              Du hast vergessen, die Definitionsliste einzuleiten: SELFHTML: HTML/XHTML / Elemente zur Textstrukturierung / Listen.

              Zudem ist es semantisch wohl korrekter zu einer Aufzählungsliste zu greifen: SELFHTML: HTML/XHTML / Elemente zur Textstrukturierung / Listen.

              Gruß
              http://hallophp.de

              Kommentar

              Lädt...
              X