您现在的位置是:首页首页 XML解析与反解析 Lucas2020-08-19【代码】898人已围观 简介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私房菜 本栏推荐 6条网页设计配色原则,让你秒变配色高手 标签云 健身 跑步 吉他 家庭 朋友 日记 运动 歌曲 游戏 电影 绘画 旅行 猜你喜欢 站点信息 建站时间:2018-05-01 在线人数:1人 文章统计:263篇 总浏览量:222474次 统计数据:百度统计 个人信息:扫描二维码查看