PHP SimpleXML

xiaoxiao2021-02-28  100

什么是 PHP SimpleXML?

SimpleXML 是 PHP 5 中的新特性。

PHP SimpleXML 处理最普通的 XML 任务,其余的任务则交由其它扩展处理。

SimpleXML 扩展提供了一种获取 XML 元素的名称和文本的简单方式。

与 DOM 或 Expat 解析器相比,SimpleXML 仅仅用几行代码就可以从 XML 元素中读取文本数据。

SimpleXML 可把 XML 文档(或 XML 字符串)转换为对象,比如:

元素被转换为 SimpleXMLElement 对象的单一属性。当同一级别上存在多个元素时,它们会被置于数组中。 属性通过使用关联数组进行访问,其中的索引对应属性名称。 元素内部的文本被转换为字符串。如果一个元素拥有多个文本节点,则按照它们被找到的顺序进行排列。

当执行类似下列的基础任务时,SimpleXML 使用起来非常快捷:

读取/提取 XML 文件/字符串的数据 编辑文本节点或属性

然而,在处理高级 XML 时,比如命名空间,最好使用 Expat 解析器或 XML DOM。


安装

从 PHP 5 开始,SimpleXML 函数是 PHP 核心的组成部分。无需安装就可以使用这些函数。


PHP SimpleXML 实例

假设我们有如下的 XML 文件,"note.xml":

<? xml version = " 1.0 " encoding = " ISO-8859-1 " ?> < note > < to > Tove </ to > < from > Jani </ from > < heading > Reminder </ heading > < body > Don't forget me this weekend! </ body > </ note >

现在我们想要输出上面的 XML 文件的不同信息:

实例 1

输出 $xml 变量(是 SimpleXMLElement 对象)的键和元素:

<?php $xml = simplexml_load_file ( " note.xml " ) ; print_r ( $xml ) ; ?>

以上代码将输出:

SimpleXMLElement Object ( [to] => Tove [from] => Jani [heading] => Reminder [body] => Don't forget me this weekend! )

实例 2

输出 XML 文件中每个元素的数据:

<?php $xml = simplexml_load_file ( " note.xml " ) ; echo $xml -> to . " <br> " ; echo $xml -> from . " <br> " ; echo $xml -> heading . " <br> " ; echo $xml -> body ; ?>

以上代码将输出:

Tove Jani Reminder Don't forget me this weekend!

实例 3

输出每个子节点的元素名称和数据:

<?php $xml = simplexml_load_file ( " note.xml " ) ; echo $xml -> getName ( ) . " <br> " ; foreach ( $xml -> children ( ) as $child ) { echo $child -> getName ( ) . " : " . $child . " <br> " ; } ?>

以上代码将输出:

note to: Tove from: Jani heading: Reminder body: Don't forget me this weekend!

PHP 5 SimpleXML 函数

函数描述__construct()创建一个新的 SimpleXMLElement 对象。addAttribute()给 SimpleXML 元素添加一个属性。addChild()给 SimpleXML 元素添加一个子元素。asXML()格式化 XML(版本 1.0)中的 SimpleXML 对象的数据。attributes()返回 XML 标签的属性和值。children()查找指定节点的子节点。count()计算指定节点的子节点个数。getDocNamespaces()返回文档中的声明的命名空间。getName()返回 SimpleXML 元素引用的 XML 标签的名称。getNamespaces()返回文档中使用的命名空间。registerXPathNamespace()为下一个 XPath 查询创建命名空间上下文。saveXML()asXML() 的别名。simplexml_import_dom()从 DOM 节点返回 SimpleXMLElement 对象。simplexml_load_file()转换 XML 文件为 SimpleXMLElement 对象。simplexml_load_string()转换 XML 字符串为 SimpleXMLElement 对象。xpath()运行对 XML 数据的 XPath 查询。

PHP 5 SimpleXML 迭代函数

函数描述current()返回当前元素。getChildren()返回当前元素的子元素。hasChildren()检查当前元素是否有子元素。key()返回当前键。next()移动到下一个元素。rewind()倒回到第一个元素。valid()检查当前元素是否有效。

XML和数组互相转换的方法

//数组转XML function arrayToXml($arr) { $xml = "<xml>"; foreach ($arr as $key=>$val) { if (is_numeric($val)){ $xml.="<".$key.">".$val."</".$key.">"; }else{ $xml.="<".$key."><![CDATA[".$val."]]></".$key.">"; } } $xml.="</xml>"; return $xml; } //将XML转为array function xmlToArray($xml) { //禁止引用外部xml实体 libxml_disable_entity_loader(true); $values = json_decode(json_encode(simplexml_load_string($xml, 'SimpleXMLElement', LIBXML_NOCDATA)), true); return $values; }

 

Array转XML

$money = 101; $sender = "xxxxx"; $obj2 = array(); $obj2['wxappid'] = APPID; $obj2['mch_id'] = MCHID; $obj2['mch_billno'] = MCHID.date('YmdHis').rand(1000, 9999); $obj2['client_ip'] = $_SERVER['REMOTE_ADDR']; $obj2['re_openid'] = $openid; $obj2['total_amount'] = $money; $obj2['min_value'] = $money; $obj2['max_value'] = $money; $obj2['total_num'] = 1; $obj2['nick_name'] = $sender; $obj2['send_name'] = $sender; $obj2['wishing'] = "你好世界"; $obj2['act_name'] = "你好"; $obj2['remark'] = "大家好";

转换后

<xml> <wxappid><![CDATA[wx1b7559b818e3c123]]></wxappid> <mch_id>1235571234</mch_id> <mch_billno>1235571234201605241726128109</mch_billno> <client_ip><![CDATA[127.0.0.1]]></client_ip> <re_openid><![CDATA[oiPuduGV7gJ_MOSfAWpVmhhgXh-U]]></re_openid> <total_amount>101</total_amount> <min_value>101</min_value> <max_value>101</max_value> <total_num>1</total_num> <nick_name><![CDATA[方倍工作室]]></nick_name> <send_name><![CDATA[方倍工作室]]></send_name> <wishing><![CDATA[恭喜发财]]></wishing> <act_name><![CDATA[方倍工作室送红包]]></act_name> <remark><![CDATA[关注公众账号]]></remark> </xml>

XML转为Array

<xml> <return_code><![CDATA[SUCCESS]]></return_code> <return_msg><![CDATA[发表成功]]></return_msg> <result_code><![CDATA[SUCCESS]]></result_code> <err_code><![CDATA[MONEY_LIMIT]]></err_code> <err_code_des><![CDATA[发表成功]></err_code_des> <mch_billno><![CDATA[1235571234201605241651123985]]></mch_billno> <mch_id>1235571234</mch_id> <wxappid><![CDATA[wx1b7559b818e3c123]]></wxappid> <re_openid><![CDATA[oiPuduGV7gJ_MOSfAWpVmhhgXh-U]]></re_openid> <total_amount>1</total_amount> </xml>

转换后

array(10) { ["return_code"]=> string(7) "SUCCESS" ["return_msg"]=> string(12) "发表成功" ["result_code"]=> string(7) "SUCCESS" ["err_code"]=> string(11) "MONEY_LIMIT" ["err_code_des"]=> string(12) "发表成功" ["mch_billno"]=> string(28) "1235571234201605241651123985" ["mch_id"]=> string(10) "1235571234" ["wxappid"]=> string(18) "wx1b7559b818e3c123" ["re_openid"]=> string(28) "oiPuduGV7gJ_MOSfAWpVmhhgXh-U" ["total_amount"]=> string(1) "1" }
转载请注明原文地址: https://www.6miu.com/read-58571.html

最新回复(0)