这是我的XML字符串:
<root>EXTRA
<elem id="123" at="abc">HelloText</elem>
</root>
如何将其转换为JSON格式(WITH属性和HelloText)?
答案 0 :(得分:0)
因为RJS不想查看我向他建议的答案,所以来自this post:
常见的缺陷是忘记json_encode()不尊重具有textvalue和attribute(s)的元素。它将选择其中之一,意思是dataloss。以下功能解决了这个问题。如果决定使用json_encode / decode方式,建议使用以下函数。
function json_prepare_xml( $domNode ){
foreach( $domNode->childNodes as $node)
if($node->hasChildNodes()) json_prepare_xml($node);
if( $domNode->hasAttributes() && strlen($domNode->nodeValue) ){
$domNode->setAttribute("nodeValue", $node->textContent );
$node->nodeValue = "";
}
return $node;
}
$dom->loadXML( file_get_contents($xmlfile) );
json_prepare_xml($dom);
$sxml = simplexml_load_string( $dom->saveXML() );
$json = json_decode( json_encode( $sxml ) ) );
通过这样做,<foo bar="3">Lorem</foo>
不会以JSON中的{"foo":"Lorem"}
结尾。