如何将带有属性和内部文本的XML标记同时转换为PHP中的SimpleXMLElement对象?

时间:2016-10-07 08:34:17

标签: php xml simplexml

当我想将XML字符串转换为SimpleXMLElement对象时,我遇到了问题。

这是我的PHP代码:

// 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 />';

我得到了这个结果:

SimpleXMLElement Object ( [lastname] => Smith ) 

{"lastname":"Smith"}

Array ( [lastname] => Smith ) 

但是没有&#34; lang&#34;属性,我不知道我做错了什么...... :(

有人可以帮帮我吗?任何想法都将非常感谢!提前谢谢。

2 个答案:

答案 0 :(得分:0)

要设置'lastname'标签的文本值'Smith':

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

希望它有所帮助!

答案 1 :(得分:0)

json_encode函数不会在任何仅为text的节点上添加xml属性。如果最终元素只是文本,并且在这种情况下您需要使用另一个属性作为语言,那么您必须添加另一个封闭标记。我总是使用 _value ,就像执行Mootools XmlToJsObject库一样。

我写了一个小PHP test