一.使用SimpleXML操控XML要处理XML文件,有两种传统的处理思路:SAX和DOM。SAX基于事件触发机制,对XML文件进行一次扫描,完成要进行的处理;DOM则将整个XML文件构造为一棵DOM树,通过对DOM树的遍历完成处理。这两种方法各有优缺点,SAX的处理思路相对抽象,DOM的处理过程相对烦琐,都不很适合新手的入门。PHP5推出了一套新的XML处理函数,即SimpleXML。名如其实,SimpleXML本身小巧精干,只提供了少量的几个方法函数,但用它处理起XML文件功能却非常强大,操作也非常的简单。1.创建XML文件$_xml=<<<xml<?xmlversion="1.0"encoding="utf-8"?><root><version>1.0</version><info>xml解析测试</info><user><name>俱乐部</name><url>http://www.yc.com</url><authorsex="男">李恢</author></user><user><name>北风网</name><url>http://www.ibeifeng.com</url><authorsex="女">谁谁谁</author></user><user><name>电驴</name><url>http://www.verycd.com</url><authorsex="男">姓黄的</author></user></root>xml;$_sxe=newSimpleXMLElement($_xml);//创建对象解析xml字符串$_sxe->asXML('test.xml');//生成XML文件2.载入XML文件$_sxe=simplexml_load_file("test.xml");//载入XML文件var_dump($_sxe);//输出相关信息print_r($_sxe);//输出主要信息Reflection::export(newReflectionClass($sxe));//用反射查看详情3.解析XML文件$_sxe=simplexml_load_file("test.xml");//载入XML文件var_dump($_sxe);//输出相关信息print_r($_sxe);//输出主要信息Reflection::export(newReflectionClass($_sxe));//用发射查看详情echo$_sxe->asXML();//打印整个XML4.读出XML数据$_sxe=simplexml_load_file("test.xml");//读取一级节点的值,比如version标签echo$_sxe->version;//如果有多个,可以设置它的数字下标echo$_sxe->version[2];//如果想要全部打印出来,可以用遍历foreach($_sxe->versionas$_version){echo'['.$_version.']';}//访问二级节点的nameecho$_sxe->user[1]->name;//获取所有二级节点的name值foreach($_sxe->useras$_user){echo'['.$_user->name.']';}//获取二级节点的标签的属性echo$_sxe->user[1]->author->attributes();5.使用XPath来获取节点$_sxe=simplexml_load_file("test.xml");//使用XPath获取节点信息$_version=$_sxe->xpath('/root/version');echo$_version[1];//遍历versionforeach($_versionas$_v){echo'['.$_v.']';}//访问二级节点$_user=$_sxe->xpath('/root/user');echo$_user[2]->name;//遍历二级节点foreach($_useras$_u){echo'['.$_u->name.']';}//访问属性echo$_user[1]->author->attributes();二.使用DOMDocument操控XML很多情况下,手工生成标记要求从上到下生成文档,必须保证标签都是完整的,开始和结束标签。尽管借助于一些PHP函数或类可以有所改善,不过PHP还提供了一组更有帮助的内置对象和函数。文档对象模型(DocumentObjectModel,DOM)提供了一个树状结构,能很容易创建和处理标签。1.DOMDocument解析XML//创建一个DOMDocument()$_doc=newDOMDocument();//载入xml$_doc->load('test.xml');//取version标签$_version=$_doc->getElementsByTagName('version');echo$_version->item(2)->nodeValue;//遍历version标签foreach($_versionas$v){echo$v->nodeValue;}2.DOMDocument生成XML//声明xml$_doc=newDOMDocument('1.0','utf-8');//排版格式$_doc->formatOutput=true;//创建一个主标签$_root=$_doc->createElement('root');//创建一个一级标签version$_version=$_doc->createElement('version');//给version标签里赋值$_versionTextNode=$_doc->createTextNode('1.0');//将值放入version标签里$_version->appendChild($_versionTextNode);//将一级标签version放入root里$_root->appendChild($_version);//将主标签写入xml$_doc->appendChild($_root);//生成xml$_doc->save('aaa.xml');