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

假设有一个xml文件如下:

<xml>
  <ToUserName><![CDATA[toUser]]></ToUserName>
  <FromUserName><![CDATA[FromUser]]></FromUserName>
  <CreateTime>123456789</CreateTime>
  <MsgType><![CDATA[event]]></MsgType>
  <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
    [FromUserName] => FromUser
    [CreateTime] => 123456789
    [MsgType] => event
    [Event] => subscribe
)
echo $obj->ToUserName; // 获取"ToUserName"对应的值
/**
* 测试xml读取cdata
*/
function xml()
{
    $str = "<xml>
    <ToUserName><![CDATA[toUser]]></ToUserName>
    <FromUserName><![CDATA[FromUser]]></FromUserName>
    <CreateTime>123456789</CreateTime>
    <MsgType><![CDATA[event]]></MsgType>
    <Event><![CDATA[subscribe]]></Event>
    </xml>";
    $obj = simplexml_load_string($str, 'SimpleXMLElement', LIBXML_NOCDATA);
    return $obj;
}

print_r(xml());

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

相关评论(0)
您是不是忘了说点什么?

友情提示:垃圾评论一律封号...

还没有评论,快来抢沙发吧!