XML mit PHP

sd12

Legendäres Mitglied
Ich werde noch wahnsinnig...

Ich will dieses XML auslesen:
http://wap.sonyericsson.com/UAProf/M600iR100.xml

insbesondere will ich an den Vendor kommen:
QUOTE <prf:Vendor>Sony Ericsson Mobile Communications</prf:Vendor>


simplexml_load_file verhedert sich irgendwie im XML... Und funktioniert nicht.

Alle anderen Klassen kapier ich nicht.

Wie komm ich an eine Variable die dann z.B: $vendor heisst?

Danke...
 
Kann es sein, dass simplexml_load_file() ein Problem mit Namespaces, d.h. dem Doppeldunkt, hat? Ich hatte in einem Script auch das Problem mit simplexml_load_string() und daraufhin den Doppelpunkt durch ein _ ersetzt, also in etwas so:

CODE $xml = str_replace('prf:', 'prf_', $xml);
$xml = simplexml_load_string($xml);



Danach ging's dann. Weiß nicht, ob dir dieser Workaround weiterhilft
wink.gif
 
Im Augenblick heißt das Dokument

QUOTE <rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:mms="http://www.openmobilealliance.org/tech/profiles/MMS/ccppschema-20050301-MMS1.2#"
xmlns:prf="http://www.openmobilealliance.org/tech/profiles/UAPROF/ccppschema-20021212#"
xmlns:pss5="http://www.3gpp.org/profiles/PSS/ccppschema-PSS5#">

<rdf:Description rdf:ID="Profile">
<prf:component>
...


Es könnte aber morgen


QUOTE <rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:mms="http://www.openmobilealliance.org/tech/profiles/MMS/ccppschema-20050301-MMS1.2#"
xmlns:dummy="http://www.openmobilealliance.org/tech/profiles/UAPROF/ccppschema-20021212#"
xmlns:pss5="http://www.3gpp.org/profiles/PSS/ccppschema-PSS5#">

<rdf:Description rdf:ID="Profile">
<dummy:component>
...


heißen - und wäre weiterhin semantisch dasselbe Xml-Dokument mit demselben Inhalt.

simplexml_load_file kenne ich nicht. Aber bei NET muß man wegen dieser prinzipiellen Möglichkeit, die Präfixe in einem Dokument beliebig benennen zu können, bei Transformationen (oder beim Auswählen von Knoten) einen Namespacemanager übergeben:


QUOTE Dim _nsMgr As XmlNamespaceManager
_nsMgr = New XmlNamespaceManager(New NameTable)
_nsMgr.AddNamespace("xyz", "http://www.openmobilealliance.org/tech/profiles/UAPROF/ccppschema-20021212#")

_xNode_list = _xDoc.SelectNodes("//xyz:template[starts-with(@name, 'irgendeinWert')]", _nsMgr)


Ergebnis: Solange die eigentliche Adresse 'http://www.openmobilealliance.org...' dieselbe ist, funktioniert dieser Code, egal, ob in der Quelldatei 'prf' oder 'dummy' als Präfix verwendet wird.

Sprich: Suche, ob es in diesem Ding simplexml_load_file etwas Analoges gibt. Da sich das Präfix im Quelldokument auch jederzeit ändern kann, ist die Lösung von Jörg heikel.
 
Ja, dieser Workarround hiltf mir...

simpleXML kennt eigentlich Namespaces
QUOTE $xml->registerXPathNamespace('rdf', 'http://www.w3.org/1999/02/22-rdf-syntax-ns#');
$xml->registerXPathNamespace('mms', 'http://www.openmobilealliance.org/tech/profiles/MMS/ccppschema-20050301-MMS1.2#');
$xml->registerXPathNamespace('prf', 'http://www.openmobilealliance.org/tech/profiles/UAPROF/ccppschema-20021212#');
$xml->registerXPathNamespace('pss5', 'http://www.3gpp.org/profiles/PSS/ccppschema-PSS5#');


Aber das will bei mir nicht funktionieren.

Über Sitepoint bin ich auch schon gestolpert, werde aber aus den Code nicht schlau...
 
QUOTE (sd12 @ Mi 19.12.2007, 20:58) Aber das will bei mir nicht funktionieren.

Dann poste mal noch den entsprechenden Suchcode, der bis jetzt noch nicht funktioniert. Ansonsten ist das im Prinzip dasselbe, was man auch in NET nutzt. Darin liegt ja der Vorteil dieser Xml-Techniken
tongue.gif
 
QUOTE (jAuer @ Mi 19.12.2007, 22:14) Dann poste mal noch den entsprechenden Suchcode, der bis jetzt noch nicht funktioniert.

Den Suchcode den such ich genau :)
 
Zurück
Oben