2016-10-07 3 views
1

Ich habe ein Problem, wenn ich eine XML-Zeichenfolge in ein SimpleXMLElement-Objekt konvertieren möchte.Wie konvertiere ich XML-Tags mit Attributen und innerem Text gleichzeitig in ein SimpleXMLElement-Objekt in PHP?

Das ist mein PHP-Code:

// XML string 
$xmlStr = <<<XML 
<?xml version='1.0'?> 
<document> 
    <lastname lang="EN">Smith</lastname> 
</document> 
XML; 

// Convert the XML string into an Array 
$xml = simplexml_load_string($xmlStr); 
$json = json_encode($xml); 
$xmlArray = json_decode($json, true); 

// Print SimpleXMLElement object 
print_r($xml); 
echo '<br /><br />'; 

// Print JSON 
print_r($json); 
echo '<br /><br />'; 

// Print XML Array 
print_r($xmlArray); 
echo '<br /><br />'; 

Und ich dieses Ergebnis:

SimpleXMLElement Object ([lastname] => Smith) 

{"lastname":"Smith"} 

Array ([lastname] => Smith) 

Aber es gibt keinen „lang“ -Attribut, und ich weiß nicht, was ich falsch mache ... :(

Wer kann mir bitte helfen? würde Jede Idee sehr geschätzt! Vielen Dank im Voraus.

+0

Ja, Sie können SimpleXMLElement mit 'json_encode()' nicht in JSON konvertieren. Es ignoriert nicht nur Attribute, sondern überschreibt auch Tags mit demselben Namen (vorausgesetzt sie haben dieselbe Tiefe). Es ist keine triviale Aufgabe, also solltest du besser deine '$ xml' durchlaufen und das Array bilden, das du hast. – sevavietl

+0

Danke @sevavietl! Ich wusste nicht, wie 'json_encode()' mit SimpleXMLElement-Objekten funktioniert. Aber es ist in der ersten Umwandlung von XML-String zu SimpleXMLElement mit 'Simplexml_load_string ($ xmlStr)', wenn es bereits das Attribut 'lang' ignoriert. Das XML soll wohlgeformt sein, daher weiß ich nicht, warum das SimpleXMLElement-Objekt es nicht enthält. –

+1

Es enthält es aber zeigt nicht mit 'print_r()' den gesamten Inhalt, da es ziemlich komplexe Struktur hat. Wenn Sie 'var_dump ($ xml-> lastname)' oder 'print_r ($ xml-> lastname)' machen, werden Sie sehen, dass es selbst 'SimpleXMLElement' ist und die Attribute werden jetzt angezeigt. [Versuchen Sie es hier.] (Http://sandbox.onlinephpfunctions.com/code/063f6b772609b7e365d871a371df38111150c33d) – sevavietl

Antwort

0

Um den Textwert 'Smith' des 'lastname' Tags zu setzen, mache ich:

$xml->lastname->{'_'} 

Hoffe es hilft!

Verwandte Themen