XML Datei auslesen

nordi

Erfahrenes Mitglied
Hi Leute,

hab eine kleine Frage. Hab schon im Forum gesucht, bin aber nicht ganz schlau draus geworden. Also sollte eigentlich ganz einfach sein. Ich hab ne XML-Datei, die ich mich PHP einlesen will ( Mit nem "Durchsuchen"-Button" ) und die soll dann in ne Tabelle ausgelesen werden. Die XML Datei ist so aufgebaut

Code:
<record id="0">
	<value1>88</value1>
	<value2>301</value2>
	<value3>New City</value3>
	<value4>Bote</value4>
	<value5>bla</value5>
	<value6>blub</value6>
	</record>
...

Hab schon erfahren, dass ich die "parsen" muss - aber wie mach ich das?

Wünsch euch ein schönes Wochenende und viel Spaß beim Fuppes ;)

Marius
 
nordi hat gesagt.:
Hab schon erfahren, dass ich die "parsen" muss - aber wie mach ich das?
Hallo,
du könntest auch mit Regulären Ausdrücken arbeiten.

EDIT:
Hier ein Beispiel. Da ich nicht sicher war, ob die ids nur Zahlen sind, hab ich es so programmiert, dass theoretisch
die ids auch aus Buchstaben bestehen können.
Also ich habe folgenden XML Datei
Code:
<record id="null">
	<value1>88</value1>
	<value2>301</value2>
	<value3>New City</value3>
	<value4>Bote</value4>
	<value5>bla</value5>
	<value6>blub</value6>
</record>
<record id="eins">
	<VALUE1>99</VALUE1>
	<VALUE2>412</VALUE2>
	<VALUE3>New City1</VALUE3>
	<VALUE4>Bote1</VALUE4>
	<VALUE5>blabla</VALUE5>
	<VALUE6>blubblub</VALUE6>
	<VALUE7>bsdfsdflubblub</VALUE7>
</record>
verwendet.
Du solltest also folgende Ausgabe
Code:
Array
(
    [null] => Array
        (
            [value1] => 88
            [value2] => 301
            [value3] => New City
            [value4] => Bote
            [value5] => bla
            [value6] => blub
        )

    [eins] => Array
        (
            [VALUE1] => 99
            [VALUE2] => 412
            [VALUE3] => New City1
            [VALUE4] => Bote1
            [VALUE5] => blabla
            [VALUE6] => blubblub
            [VALUE7] => bsdfsdflubblub
        )

)
erhalten, wenn du dieses Script verwendest.
PHP:
<pre>
<?php
    preg_match_all('/<record id="([0-9a-zA-Z]+)">(.*?)<\/record>/si', file_get_contents('test.xml'), $result);
    foreach ($result[1] as $id){
        $ids[] = $id;
    }
    $i = 0;
    foreach ($result[2] as $value){
        preg_match_all('/<(.*?)>(.*?)<\/(.*?)>/si', $value, $inhalt);
        $arr[] = array_combine($inhalt[1], $inhalt[2]);
        $i++;
    }
    print_r(array_combine($ids, $arr));
?>
</pre>
Aus diesem Array kannst du dier dann z.B. eine Tabelle erstellen lassen.

EDIT2:

So könntest du das ganze z.B. in einer Tabelle ausgeben lassen.
PHP:
<?php
    preg_match_all('/<record id="([0-9a-zA-Z]+)">(.*?)<\/record>/si', file_get_contents('test.xml'), $result);
    foreach ($result[1] as $id){
        $ids[] = $id;
    }
    $i = 0;
    foreach ($result[2] as $value){
        preg_match_all('/<(.*?)>(.*?)<\/(.*?)>/si', $value, $inhalt);
        $arr[] = array_combine($inhalt[1], $inhalt[2]);
        $i++;
    }
    echo '<table border="1" bordercolor="#000000" width="100%" style="border-collapse: collapse">';
    foreach (array_combine($ids, $arr) as $key => $value){
        echo '<tr><td align="center" colspan="2">ID = '.$key.'</td></tr>';
        foreach ($value as $k => $v){
            echo '<tr><td align="center">'.$k.'</td><td align="center">'.$v.'</td></tr>';
        }
        echo '<tr><td colspan="2">&nbsp;</td></tr>';
	}
    echo '</table>';
?>

mfg
forsterm
 
Zuletzt bearbeitet:
Also hab deinen Code einfach mal bei mir reinkopiert - aber es kommt garkeine ausgabe?

Code:
<?php


    preg_match_all('/<record id="([0-9a-zA-Z]+)">(.*?)<\/record>/si', file_get_contents('output.xml'), $result);
    foreach ($result[1] as $id){
        $ids[] = $id;
    }
    $i = 0;
    foreach ($result[2] as $value){
        preg_match_all('/<(.*?)>(.*?)<\/(.*?)>/si', $value, $inhalt);
        $arr[] = array_combine($inhalt[1], $inhalt[2]);
        $i++;
    }
    echo '<table border="1" bordercolor="#000000" width="100%" style="border-collapse: collapse">';
    foreach (array_combine($ids, $arr) as $key => $value){
        echo '<tr><td align="center" colspan="2">ID = '.$key.'</td></tr>';
        foreach ($value as $k => $v){
            echo '<tr><td align="center">'.$k.'</td><td align="center">'.$v.'</td></tr>';
        }
        echo '<tr><td colspan="2">&nbsp;</td></tr>';
    }
    echo '</table>';
?>
Code:
<?xml version="1.0" encoding="WINDOWS-1251" ?>
<kum_data>
	<dataset>
	<record id="0">
	<value1>88</value1>
	<value2>301</value2>
	<value3>New City</value3>
	<value4>Bote</value4>
	<value5></value5>
	<value6></value6>
	</record>
	<record id="1">
	<value1>250</value1>
	<value2>220</value2>
	<value3>Traverse</value3>
	<value4>dean</value4>
	<value5>-A-</value5>
	<value6>32</value6>
	</record>
	<record id="2">
	<value1>403</value1>
	<value2>580</value2>
	<value3>New City</value3>
	<value4>Aribeth</value4>
	<value5></value5>
	<value6></value6>
	</record> [...]

Hast du ne Idee, woran das liegen könnte?
 
nordi hat gesagt.:
Also hab deinen Code einfach mal bei mir reinkopiert - aber es kommt garkeine ausgabe?
Hallo,
hab jetzt das ganze mal genau mit den gleichen Dateien ausprobiert, die du auch verwendet hast und hab folgende Ausgabe erhalten:
24944attachment.png
Eventuell bekommst du eine Fehlermeldung, wenn du PHPs Fehlersensibilität erhöst.
PHP:
<?php
    ini_set('display_errors', 1);
    error_reporting(E_ALL);
?>
mfg
forsterm
 
forsterm: Muss der Server irgendwelche Voraussetzungen erfüllen? Auch mit der Erhöhung der Fehlersensibilität bekomme ich keine Ausgabe
 
Zurück