首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 网站开发 > XML SOAP >

php操作XML资料之SAX、simpleXML方式

2013-03-06 
php操作XML文件之SAX、simpleXML方式一、SAX,也就是simple API for XML,XML的简单应用接口具体步骤:创建XML

php操作XML文件之SAX、simpleXML方式

一、SAX,也就是simple API for XML,XML的简单应用接口

       具体步骤:①创建XML解析器,使用xml_parser_create函数,参数是编码,返回值是对应的解析器资源

                        ②创建解析处理函数,分别处理开始标签、结束标签、数据,设置标签的处理函数为xml_set_element_handler,三个参数,第一个是解析器资源,第二个是处理开始标签的函数名,第二个是处理结束标签的函数名;设置处理数据的函数为xml_set_character_data_handler,两个参数,第一个是解析器资源,第二个是处理数据的函数名;在这里定义的三个自定义函数是需要自己去实现的

                        ③开始解析,xml_parse,三个参数,第一个是解析器资源,第二个是要处理的内容,这里的内容要求是字符串形式的,所以可以是通过file_get_contents函数读取文件得到的字符串,第三个参数设置为true的话,就是告诉解析器,当前已经是最后一个数据了,否则解析器就会继续等待,而不会认为是处理完毕,所以要得到错误,就需要设置为true,解析器处理完后知道后面没有要处理的数据了,就能判断有没有错误,有错误就会抛出

                        ④出现错误如何处理,xml_get_error_code,xml_get_current_line_number,xml_get_current_column_number,分别是获得错误代码、获得错误所在行、获得错误所在列,参数都是解析器资源,还有一个xml_error_string获得错误信息,这个参数有点不一样,是以xml_get_error_code的返回值作为参数

       这个方式的优缺点(相对于DOM方式):

       ①DOM需要将所有数据读取到内存,并将节点处理好之后再操作,SAX是读取一个,操作一个,释放一个

       ②当xml文档结构有错误时,DOM没有办法解析成DOM树,而SAX可以操作,直到发生错误的地方

       ③SAX只能读取数据,而DOM能做很多复杂的操作,SAX处理速度快,适合大文档


二、simpleXML,这是php专门提供的一种简单处理xml的方式,它将xml数据在内存中形成对象集合,相同级别的对象会转换成数组,操作起来很容易

       步骤:①实例化一个SimpleXMLElement对象,参数是通过file_get_contents得到的字符串,此时获得的对象就相当于是xml文档的根元素,$sxe new SimpleXMLElement($string);

                  ②访问节点$sxe->book->title;,要访问一个节点,直接通过根节点指到下一个子节点,再一直指到要访问的节点即可,得到节点对象,可以直接使用echo输出节点里面的数据,因为对象中有一个类似__tostring的方法,还能以数组的方式访问,$sxe->book[2]->title,或者直接遍历foreach($sxe->book as $book){echo $book->title}

                  ③增加节点$sxe->addChild('book', 'abcd'),参数分别是节点名、节点值,用这个方法可以在任意节点里面增加子节点

                  ④增加属性:$book->addAttribute('id', 'book10')

                  ⑤删除节点:unset($sxe->book[2]);

                  ⑥更新节点:找到节点后直接赋值即可

                  ④保存xml文件:$sxe->asXML('book.xml'); 参数是文件名



SimpleXMLElement对象与DOM对象的相互转换:

1、将dom转换成SimpleXMLElement:直接使用函数$sxe simple_import_dom($doc); 其中$doc是要转换的dom对象

2、将SimpleXMLElement对象转换成dom对象:$root dom_import_simplexml($sxe);现在得到的只是节点,因为$sxe本身就是相当于xml文档的根元素对象嘛,所以我们还需要创建dom树,然后将节点和树联系上:①$doc new DOMDocument('1.0', 'utf-8');   ②$domelement $doc->importNode($root, true),这里的true很重要,不设置的话,就只是将根元素节点对象放到dom树上了,用true表示递归的将所有节点都放到dom树上, ③$doc->appendChild($domelement);  ④$doc->save('book.xml');

热点排行