欢迎光临
一起探讨学习进步

PHP解析带CDATA的XML方法

有好多xml格式的数据是带有CDATA的,如果开发过微信公众号的朋友应该会有很深的感触,那么里面的内容应该如何解析呢?

假设有 一个xml文件如下:

<xml>
  <ToUserName><![CDATA[toUser]]></ToUserName>
  <FromUserName><![C
DATA[FromUser]]></FromUserName>
  <CreateTime>123456789</CreateTime>
  <MsgType><![CDATA[event]]></M
sgType>
  <Event><![CDATA[subscribe]]></Event>
</xml>

为了便于操作,我们假设$str的内容就是上面这段XML。  

解决思路很简单:先去掉"cdata",然后直接取对应字符串的值,php代码如下:

$obj = simplexml_load_string($str, 'SimpleXMLElement', LIBXML_NOCDATA);

或者:

$obj = simplexml_load_string($str, null, LIBXML_NOCDATA);

使用print_r打印$obj的结果如下:

SimpleXMLElement Object
(
    [ToUserName] => toUser
    [Fr
omUserName] => FromUser
    [CreateTime] => 123456789
    [MsgType] =>&nb
sp;event
    [Event] => subscribe
)
echo $obj->ToUserName; // 
获取"ToUserName"对应的值
/**
* 测试xml读取
cdata
*/
function xml()
{
    $str = "<xml>
    <ToUserName><![CDATA[toU
ser]]></ToUserName>
    <FromUserName><![CDATA[FromUser]]></FromUserName>
    <Creat
eTime>123456789</CreateTime>
    <MsgType><![CDATA[event]]></MsgType>
    <Event>&l
t;![CDATA[subscribe]]></Event>
    </xml>";
    $obj = simplexml_load_string($str, &
#39;SimpleXMLElement', LIBXML_NOCDATA);
    return $obj;
}

print_r(xml());

赶快试一下看看是不是能读出来了喵 ~

未经允许不得转载:PHP解析带CDATA的XML方法

评论 0

评论前必须登录!