php解析xml转换为数组

之前接触的项目大多是json数据居多,最近的项目需要使用php获取xml,解析后入库,谁知道就这么个简单的问题踩了很多坑,记录一下。

根据帮助文档查询,php可以使用simplexml_load_file() 函数把 XML 文档载入对象中。使用函数获取到post过来的xml数据调用simplexml_load_file()方法,直接报错:

String not started expecting ' or "

经过检查和查资料,应该是转义符反斜线 \ 和单双引号导致的问题,这里用到了php的函数stripslashes(),可以去除反斜线。再执行程序,继续报错:

EntityRef: expecting ';'

经过检查和查资料,确定是 & 导致了错误,& 属于不合法的XML字符。
以下5个是常见的不合法XML字符和对应的XML文档预定义好的实体:

小于号 < 需要转化为:&lt;  
大于号 > 需要转化为:&gt;  
和且与 & 需要转化为:&amp;  
单引号 ' 需要转化为:&apos; 
双引号 " 需要转化为:&quot;

这里使用了str_replace()进行了替换,终于出现了想要的结果。

public function getxml(){
	//示例xml文本
	$xmlStr = "<?xml version=\"1.0\"?>\n<msg>\n\t<appmsg appid=\"\" sdkver=\"0\">\n\t\t<title>标题<\/title>\n\t\t<des>简介<\/des>\n\t\t<url>http:\/\/abc.com\/def?g=1&h=2<\/url>\n\t\t<\/appmsg>\n\t<\/msg>";
	$xmlStr = str_replace('&', '&amp;', $xmlStr);
	$xmlStr = stripslashes($xmlStr);
	$xml_resp = simplexml_load_string($xmlStr);
	$xml_ary = json_decode(json_encode($xml_resp), true);
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值