php解析xml的坑

对于有命名空间的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);
    }

你可能感兴趣的:(php解析xml的坑)