PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : XML parsen mit Doppelpunkt im Tag



asterix88
13-10-2010, 17:12
Hallo,
ich möchte eine xml-Datei parsen. Dazu nutze ich im Moment SimpleXML. Soweit funktioniert das ganze auch, jedoch kann ich keine Werte aus Tags parsen, welche Doppelpunkte enthalten. Ich habe schon stundenlang gegoogelt, aber entweder verstehe ich die Lösung nicht oder sie passt nicht zu meinem Problem.

Hier ein Auszug der XML-Datei


<?xml version="1.0" encoding="utf-8"?>
<gpx>
<name>test</name>
<desc>test</desc>
<email>test</email>
<wpt>
<time>test</time>
<name>test</name>
<desc>test</desc>
<group:header>
<group:name>test</group:name>
<group:value>test</group:value>
</group:header>
</wpt>
</gpx>


Mein PHP-Code


$xml = simplexml_load_file('test.txt');

$ausgabe1 = $xml->wpt[0]->name;
$ausgabe2 = $xml->wpt[0]->desc;


DAS funktioniert. Möchte ich aber auf die Elemente mit dem Doppelpunkt zugreifen, führt es zu Fehlermeldungen.

Kann jemand ganz kurz ein paar Zeilen Code schreiben, wie ichein Element mit Doppelpunkt auslesen kann?

undefined
13-10-2010, 17:58
group ist ein Namespace siehe die Option ns oder registerXPathNamespace ;)

asterix88
14-10-2010, 14:24
danke, das hat mir schonmal sehr geholfen!
nun sieht es bei mir in entwa so aus (im Moment noch nur zum testen):



$xml = <<<EOD
<gpx xmlns:group="test">
<wpt>
<group:cache xmlns:group="test">
<group:name>test1</group:name>
<group:desc>test2</group:desc>
<group:time>test3</group:time>
</group:cache>
</wpt>
<wpt>
<group:cache xmlns:group="test">
<group:name>test4</group:name>
<group:desc>test5</group:desc>
<group:time>test6</group:time>
</group:cache>
</wpt>
</gpx>
EOD;

$sxe = new SimpleXMLElement($xml);
$sxe->registerXPathNamespace('group', 'test');

$result = $sxe->xpath('//group:name');
$result = $sxe->xpath('//group:desc');
$result = $sxe->xpath('//group:time');

foreach ($result as $title)
{
echo $title.'<br>';
}


Soweit ich das jetzt hab, kann ich aus jedem <wpt>-Tag immer nur einen Wert rauslesen.
Ich möchte aber aus jedem <wpt>-Tag immer mehrere auslesen. Kann ich nicht in EINER Schleife immer einen kompletten <wpt>-Tag auslesen? Diese hinausgelesenen Strings möchte ich dann in Variablen speichern? Im nächsten Schleifendurchlauf ist dann der 2. <wpt>-Tag dran und so weiter.

Wie mache ich das am besten? Bin absoluter Anfänger, wenns um sowas geht...

undefined
14-10-2010, 17:20
Warum liest du nicht die SimpleXMLElement Manual auf PHP.net? In den angefügten Beispielen kannst du doch ableiten was du benötigst.
http://de3.php.net/manual/de/class.simplexmlelement.php

Zudem ist SimpleXML eher was für einfache XML Strukturen erstellen.
Beim lesen ist DOM wesentlich Leistungsstärker

PS: Das hier ist ein PHP Problem und deshalb im falschen Forenbereich.