XML转换到JSON错误

问题描述:

在xml我正在recieving看起来像:XML转换到JSON错误

<?xml version="1.0" encoding="utf-8"?> 
<ChangePassPhraseRequestResponse 
     xmlns:xsd="http://www.w3.org/2001/XMLSchema" 
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
     xmlns="www.envmgr.com/LabelService"> 
    <Status>2012</Status> 
    <ErrorMessage>Account Error encountered (Log ID: 11845)</ErrorMessage> 
</ChangePassPhraseRequestResponse> 

我试图编码为JSON作为这样(其中XML =以上响应)

$data = simplexml_load_string($xml); 
echo json_encode($data); 

错误我得到是:

simplexml_load_string(): namespace warning : xmlns: URI www.envmgr.com/LabelService is not absolute 
SimpleXMLElement::__construct(): Entity: line 4: parser error : Start tag expected, '&lt;' not found 

的问题是XMLNS URL(www.envmgr.com/LabelService)没有计划(HTTP://或https://)指定。如果可能,添加到URL XMLNS或尽量压低使用forllowing代码警告:

$data = simplexml_load_string($xml, 'SimpleXMLElement', LIBXML_NOWARNING); 
echo json_encode($data); 

入住这里:https://eval.in/532347

+0

我去这只是利用这样:新的SimpleXMLElement($ XML,LIBXML_NOWARNING); – mithereal

您需要使用preg_replace()来删除名称空间。

$xml_string = preg_replace('/xmlns[^=]*="[^"]*"/i', '', $xml); 
$data = simplexml_load_string($xml_string); 
echo json_encode($data); 

结果:

{"Status":"2012","ErrorMessage":"Account Error encountered (Log ID: 11845)"}