如何从XML字符串中获取JSON

时间:2014-12-24 07:55:40

标签: php json

这是我的XML字符串:

<root>EXTRA
  <elem id="123" at="abc">HelloText</elem>
</root>

如何将其转换为JSON格式(WITH属性和HelloText)?

1 个答案:

答案 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"}结尾。