XML über DOM

RalfHeinz

Erfahrenes Mitglied
Hallo,

ich verzweifel hier seit ein paar Stunden an einer "einfachen" XML-Auslese-Variante.
Zunächstmal zu meinen Daten

Die XML-Datei:
Code:
<?xml version='1.0' encoding="UTF-8"?>
<data>
	<user name="Name1" alter="20">
		<ebene1>text ebene 1</ebene1>
		<ebene2>text ebene 2</ebene2>
		<ebene3>text ebene 3</ebene3>
	</user>
	<user name="Name2" alter="30">
		<ebene1>text ebene 1</ebene1>
		<ebene2>text ebene 2</ebene2>
		<ebene3>text ebene 3</ebene3>
	</user>
	<user name="Name3" alter="40">
		<ebene1>text ebene 1</ebene1>
		<ebene2>text ebene 2</ebene2>
		<ebene3>text ebene 3</ebene3>
	</user>

</data>

zum Auslesen in php:
Code:
$dom = new DOMDocument();
$dom->preserveWhiteSpace = false;
$dom->load('./xml/data.xml');
$data = $dom->GetElementsByTagName('user');	//Datensatz beginnt mit "user"
for ($i = 0; $i <= $data->length-1; $i++)	{
	echo "i= ". $i ." ";
	echo $data->item($i)->nodeName . " = ";
	echo $data->item($i)->nodeValue . "<br />";
}

Ausgabe:
Code:
i= 0 user = text ebene 1text ebene 2text ebene 3 
i= 1 user = text ebene 1text ebene 2text ebene 3 
i= 2 user = text ebene 1text ebene 2text ebene 3

Ich möchte allerdings, dass der mir "text ebene1", "text ebene2", "text ebene3" jeweils einzeln ausgibt. Mit SimpleXML hab ich das schon hinbekommen, möchte das aber gerne auch über DOM schaffen (können).

Bin (noch) nicht wirklich gut in PHP und also für jede Hilfe dankbar.
 
Du musst nochmal über das Item iterieren, schau man, ob du damit zurecht kommst:
PHP:
<?php
header('Content-Type: text/plain; charset="UTF-8"');

$dom = new DOMDocument();
$dom->preserveWhiteSpace = false;
$dom->load('foo.xml');
$data = $dom->GetElementsByTagName('user');	//Datensatz beginnt mit "user"
for ($i = 0; $i <= $data->length-1; $i++)	{
        if($data->item($i)->hasChildNodes())
        {
                foreach($data->item($i)->childNodes as $node)
                {
                        echo "{$node->nodeName} | {$node->nodeValue}\n";
                }
                
                echo "---\n";
        }
}
 
Schwenk mal lieber um auf SimpleXML! Das geht dann wesentlich einfacher :)

PHP:
$xml = simplexml_load_file('./xml/data.xml');

foreach($xml as $xmlElement)
{
	var_dump($xmlElement); // Object von SimpleXMLElement
	var_dump((array)$xmlElement); // Als Array geht's auch
}

Auf Attribute kannst du mittels
PHP:
$xmlElement->attributes()->key
zugreifen und auf alle normalen Werte mittels
PHP:
$xmlElement->key
 
Erstmal Danke für die Antworten und eure Hilfe.
Ich wollte es ja nicht per simplexml machen sondern über dom.

mAus Post hat mir aber den entscheidenden Hinweis gegeben (mit hasChildNodes).
Nachmals vielen Dank
 
Zurück