对于有命名空间的xml,simplexml没办法直接解析,需要先过滤一下xml字符串。
private function parseNamespaceXml($xmlstr)
{
$xmlstr = preg_replace('/\sxmlns="(.*?)"/', ' _xmlns="${1}"', $xmlstr);
$xmlstr = preg_replace('/<(\/)?(\w+):(\w+)/', '<${1}${2}_${3}', $xmlstr);
$xmlstr = preg_replace('/(\w+):(\w+)="(.*?)"/', '${1}_${2}="${3}"', $xmlstr);
$xmlobj = XML::parse($xmlstr);
return json_decode(json_encode($xmlobj), true);
}
网友评论