使用PHP中SPL库中的对象方法进行XML和数组的转换这需要我们对XML格式的数据进行解析和转换。但是PHP中并没有像json_encode()和json_decode()这样的函数可以让我们方便的进行转换,所以大家在操作XML数据的时候,往往需要自己写代码来实现。今天,我们介绍了使用SPL扩展库中的一些对象方法来处理XML数据格式的转换。首先我们定义一个类,相当于封装了一个操作XML数据转换的类,方便我们以后使用。如果只是为了测试效果,直接写下面的函数也是可以的。classConvertXml{//....}XML转换为PHP数组classConvertXml{publicfunctionxmlToArray(SimpleXMLIterator$xml):array{$res=[];对于($xml->rewind();$xml->valid();$xml->next()){$a=[];如果(!array_key_exists($xml->key(),$a)){$a[$xml->key()]=[];}if($xml->hasChildren()){$a[$xml->key()][]=$this->xmlToArray($xml->current());}else{$a[$xml->key()]=(array)$xml->current()->attributes();$a[$xml->key()]['value']=strval($xml->current());}$res[]=$a;}返回$res;}//.....}$wsdl='http://flash.weather.com.cn/wmaps/xml/china.xml';$xml=newSimpleXMLIterator($wsdl,0,true);$convert=newConvertXml();//var_dump($convert->xmlToArray($xml));//array(37){//[0]=>//array(1){//["city"]=≫//array(2){//["@attributes"]=>//array(9){//["quName"]=>//string(9)"黑龙江"//["pyName"]=>//string(12)"heilongjiang"//["cityname"]=>//string(9)"Harbin"//["state1"]=>//string(1)"7"//["state2"]=>//string(1)"3"//["stateDetailed"]=>//string(15)"小雨阵雨"//["tem1"]=>//string(2)"21"//["tem2"]=>//string(2)"16"//["windState"]=>//string(21)"南风6-7到4-5"//}//["value"]=>//string(0)""//}//}//[1]=>//array(1){//["city"]=>//array(2){在这里,我们使用SimpleXMLIterator对象。从名字就可以看出,它的作用就是生成可以遍历的SimpleXMLElement对象。第一个参数是格式正确的XML文本或URL。第二个参数是一些选项参数,这里直接给0就可以了。第三个参数表示第一个参数是否为链接地址,这里我们给true。我们在客户端生成了一个SimpleXMLIterator对象并将其传递给xmlToArray()方法。这样,SimpleXMLIterator对象就可以让我们遍历每一个节点,接下来的事情就很简单了,我们只需要判断该节点是否有子节点,如果有子节点,就递归调用当前方法。如果没有子节点,则获取该节点的属性和内容。此测试链接用于获取天气信息。在返回的内容中,每个节点只有属性,没有内容。在转换后的数组中体现为value字段为空。PHP数组或对象转换为XMLclassConvertXml{//......constUNKNOWN_KEY='unknow';publicfunctionarrayToXml(array$a){$xml=newSimpleXMLElement('
