XML einlesen mit SimpleXML

mcready

Grünschnabel
Hallo zusammen,

ich habe folgendes Problem:
Ich habe eine relativ große Datenbank als XML-Datei vorliegen. Die möchte ich mit PHP in eine MySQL-Datenbank einlesen. Der MySQL-Part ist hier nicht das Thema, da bin ich fit drin. Nur mit XML habe ich groß noch nie gearbeitet.

Folgende Datenstruktur ist gegeben:

<root>
<row>
<field name="Vorname">Max</field>
<field name="Name">Mustermann</field>
<field name="Strasse">Musterstr. 12</field>
.......
</row>
<row>
<field name="Vorname">Franz</field>
.....
</row>
......
</root>

Also alle Datensätze gleich aufgebaut, gleiche Feldzahl. Pro Datensatz 50 Felder, und die Anzahl der Datensätze weiß ich noch nichtmal genau. Dürften aber ~5.000 sein.

Mit folgender Routine habe ich bisher den ersten Datensatz komplett und korrekt ausgelesen bekommen. Aber alle weiteren klappen nicht. Ich habe die Tabelle auf drei Felder beschränkt, damit es besser lesbar ist.
$attributt ist der Zähler für das Feld "<field>" innerhalb der "<row>". Und ja, ich weiß, daß man es regulär mit einem "t" am Ende schreibt ;-)

PHP:
<?php
$xml = simplexml_load_file('adressen.xml');
echo "<table border=1>";
echo "<tr><td>datensatz</td><td>Vorname</td><td>Name</td><td>Strasse</td></tr>";
foreach ($xml->row as $row) {
	$attributt = 0;
	echo "<tr><td></td>";	 
		while ($attributt < 50){ // 50 Felder pro Datensatz
			echo "<td>".$xml->row->field[$attributt]."</td>";
			$attributt++;
		}
	echo "</tr>";
}
echo "</table>";
?>

Das kann nicht viel sein ... nur was? Bin für jede Hilfe dankbar!

Gruß,

Enrico
 
Hi,
du brauchst einen weiteren Zähler.

Zum Beispiel so:
Code:
echo "<table border=1>";
echo "<tr><td>datensatz</td><td>Vorname</td><td>Name</td><td>Strasse</td></tr>";
$i = 0;
foreach ($xml->row as $row) {
$i++;
    $attributt = 0;
    echo "<tr><td></td>";     
        while ($attributt < 50){ // 50 Felder pro Datensatz
            echo "<td>".$xml->row[$i-1]->field[$attributt]."</td>";
            $attributt++;
        }
    echo "</tr>";
}
echo "</table>";


Ich würde das dann aber gleich mit for-Schleifen lösen, sieht schöner aus, finde ich:
PHP:
$rowCount = count( $xml->row );
$fieldCount = 50;
for( $i = 0; $i < $rowCount; $i++ )
{
    echo '<tr><td></td>';
    for( $j = 0; $j < $fieldCount; $j++ )
    {
        echo "<td>".$xml->row[$i]->field[$j]."</td>";
    }
    echo '</tr>';
}
 
Zuletzt bearbeitet:
Zurück