2016-07-01 4 views
0

Ich bin beschäftigt mit einem EPP-Registrierungsmodul, das XML über einen Stream-Dienst zurückgibt.simplexml_load_string Funktion Laden XML-Datei in PHP

Die XML kehrt in Ordnung, aber ich bin nicht in der Lage Last zu erhalten unter Verwendung von PHP simple_xml_load_string oder new SimpleXMLElement um die korrekte XML zu laden, damit ich die Daten als ein Objekt verwenden kann.

Ich bin jedoch in der Lage, die XML zurück mit asXML(), so dass es aussehen würde, dass die XML geladen wird, ich bin nur nicht in der Lage, Zugriff auf einen der Werte innerhalb des Objekts. Ein print_r() des Objekts gibt auch ein leeres Objekt zurück (von dem ich verstehe, dass das korrekt ist). Hier

ist ein Beispiel für ein Anmeldeergebnis:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?> 
<epp:epp xmlns:epp="urn:ietf:params:xml:ns:epp-1.0"> 
    <epp:response> 
    <epp:result code="1000"> 
     <epp:msg>Access granted</epp:msg> 
    </epp:result> 
    <epp:trID> 
     <epp:clTRID>ABC-123456</epp:clTRID> 
     <epp:svTRID>OTE-EPP-155A695A3C9-717E</epp:svTRID> 
    </epp:trID> 
    </epp:response> 
</epp:epp> 

Was ich brauche, zu bekommen Zugang zu ist das Ergebnis Code oben.

Hier ist ein Beispiel PHP ich versucht habe:

// Note that the $var property contains the XML exactly as it is above. 
$result = simplexml_load_string($var); 
echo $result->response->msg; // Nothing 
echo $result->asXML(); // Returns the XML correctly. 
$result = new SimpleXMLElement($var); 
print_r($result); // Returns an empty object. 
echo $result->response->msg; // Nothing 
echo $result->toXML(); // Returns the XML correctly. 

Irgendwelche Ideen wäre sehr dankbar.

Antwort

1

Laut Handbuch simplexml_load_string hat die folgenden Parameter:

SimpleXMLElement simplexml_load_string (string $data [, string $class_name = "SimpleXMLElement" [, int $options = 0 [, string $ns = "" [, bool $is_prefix = false ]]]]) 

Deshalb glaube ich, dass Sie Ihre XML auf diese Weise laden können:

simplexml_load_string($var, "SimpleXMLElement", 0, "epp", true); 

Ich hoffe, das für Sie arbeitet.

+0

Ausgezeichnet! Danke, funktioniert wie ein Zauber :) Bin ich dann richtig, dass der Namensraum fehlte? – mauzilla

+0

Genau, Sie müssen der Klasse mitteilen, dass Tags mit einem Namespace vorangestellt werden;) –