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, '<' 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);
答
您需要使用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)"}
我去这只是利用这样:新的SimpleXMLElement($ XML,LIBXML_NOWARNING); – mithereal