您现在的位置是:技术博客 > PHPPHP XML解析与反解析 Lucas2020-08-19 13:02【代码】899人已围观 简介XML是一种标记语言,设计之初是用来传输和存储数据,如何将XML文件转换成对象、数组,又如何将对象、数组转换成XML呢? XML是一种标记语言,设计之初是用来传输和存储数据,使用场景时分广泛,下面是关于数据转换的几个实用案例。 #### 一个标准的XML文件格式 ``` <?xml version='1.0' encoding="UTF-8" ?> <CATALOG> <PLANT> <COMMON>Bloodroot</COMMON> <BOTANICAL>Sanguinaria canadensis</BOTANICAL> <ZONE>4</ZONE> <LIGHT>Mostly Shady</LIGHT> <PRICE>$2.44</PRICE> <AVAILABILITY>031599</AVAILABILITY> </PLANT> <PLANT> <COMMON>Columbine</COMMON> <BOTANICAL>Aquilegia canadensis</BOTANICAL> <ZONE>3</ZONE> <LIGHT>Mostly Shady</LIGHT> <PRICE>$9.37</PRICE> <AVAILABILITY>030699</AVAILABILITY> </PLANT> </CATALOG> ``` #### 解析案例 1、解析一个简单的XML文件 ``` /** * 最简单的xml文件的解析例子 * 版本要求:php5+ */ $str = <<<XML <?xml version='1.0'?> <document> <cmd>login</cmd> <login>imdonkey</login> <address>武汉</address> </document> XML; // 将xml字符串转换成SimpleXMLElement对象 $xmlObj = simplexml_load_string($str); // 将SimpleXMLElement对象转化成数组 $xmlArr = json_decode(json_encode($xmlObj), TRUE); echo '<pre>'; print_r($xmlObj); // SimpleXMLElement Object ( [cmd] => login [login] => imdonkey [address] => 武汉 ) print_r($xmlArr); // Array ( [cmd] => login [login] => imdonkey [address] => 武汉 ) ``` 2、解析一个包含CDATA标记的简单的XML文件 ``` /** * 带CDATA标记的xml文件的解析例子 * 提示:使用<![CDATA[]]>这个标记包含的内容将表示为纯文本,比如<![CDATA[<]]>表示文本内容“<”。 * 版本要求:php5+ */ $str = <<<XML <?xml version='1.0' encoding="UTF-8" ?> <!-- 为了避免编码错误,建议指定编码 --> <document> <cmd><![CDATA[login]]></cmd> <login><![CDATA[imdonkey]]></login> <address><![CDATA[武汉]]></address> </document> XML; // 将xml字符串转换成SimpleXMLElement对象 $xmlObj = simplexml_load_string($str , null , LIBXML_NOCDATA); //LIBXML_NOCDATA - 将 CDATA 设置为文本节点 // 将SimpleXMLElement对象转化成数组 $xmlArr = json_decode(json_encode($xmlObj), TRUE); echo '<pre>'; print_r($xmlObj); // SimpleXMLElement Object ( [cmd] => login [login] => imdonkey [address] => 武汉 ) print_r($xmlArr); // Array ( [cmd] => login [login] => imdonkey [address] => 武汉 ) ``` #### 反解析案例 ``` function data_to_xml($data) { $xml = ''; foreach ($data as $key => $val) { is_numeric($key) && $key = "item id=\"$key\""; $xml .= "<$key>"; $xml .= ( is_array($val) || is_object($val)) ? data_to_xml($val) : $val; list($key, ) = explode(' ', $key); $xml .= "</$key>"; } return $xml; } /** * 带CDATA标记的xml文件的解析例子 * 提示:使用<![CDATA[]]>这个标记包含的内容将表示为纯文本,比如<![CDATA[<]]>表示文本内容“<”。 * 版本要求:php5+ */ $str = <<<XML <?xml version='1.0' encoding="UTF-8" ?> <!-- 为了避免编码错误,建议指定编码 --> <root> <document> <cmd><![CDATA[login]]></cmd> <c><![CDATA[login]]></c> <login><![CDATA[imdonkey]]></login> <address><![CDATA[武汉]]></address> <returnData> <msg><![CDATA[ok]]></msg> <sign><![CDATA[737w2we83er7f63j]]></sign> </returnData> </document> </root> XML; // 将xml字符串转换成SimpleXMLElement对象 $xmlObj = simplexml_load_string($str , null , LIBXML_NOCDATA); //LIBXML_NOCDATA - 将 CDATA 设置为文本节点 // 将SimpleXMLElement对象转化成数组 $xmlArr = json_decode(json_encode($xmlObj), TRUE); echo '<pre>'; print_r($xmlArr); file_put_contents('./demo.xml', data_to_xml($xmlArr)); //<document><cmd>login</cmd><c>login</c><login>imdonkey</login><address>武汉</address><returnData><msg>ok</msg><sign>737w2we83er7f63j</sign></returnData></document> ``` 转载:感谢您对Lucas个人博客网站平台的认可,非常欢迎各位朋友分享到个人站长或者朋友圈,但转载请说明文章出处“来源Lucas个人博客”。 很赞哦! ( 0 ) 上一篇:获取毫秒级格式化时间 下一篇:Swoole 基础篇一(初识) 相关文章 高并发库存防控超量 Swoole 基础篇一(初识) Sublime代码格式化 Session与Cookie 点击排行 生活不止眼前的苟且,还有诗和远方 十年一觉电影梦 奥地利基茨比厄尔 禅修治愈身心 自律成就自我 零边际成本社会 Modern PHP 鸟哥的Linux私房菜 本栏推荐 要技术,更要有创意 定时任务 Curl无法发送https请求 Lnmp环境搭建 常用的SQL函数 Windows的cmd指令 ueditor工具栏浮动bug 有趣的js插件 标签云 git laravel swoole javascript vue ajax html css sql linux docker flask django nginx apache thinkphp markdown sublime wechat layui photoshop nodejs mysql windows composer java maven springboot mybatis IDE 猜你喜欢 Swoole 基础篇一(初识) PHP进程管理器 正则的快速上手 Sublime代码格式化 Lnmp环境搭建 高并发库存防控超量 Linux之top命令 常用的SQL函数 站点信息 建站时间:2018-05-01 在线人数:1人 文章统计:263篇 总浏览量:222556次 统计数据:百度统计 个人信息:扫描二维码查看