好得很程序员自学网

<tfoot draggable='sEl'></tfoot>

怎么用php解析xml文件 - php高级应用

怎么用php解析xml文件

xml文件是一种数据存储格式,下面小编给大家介绍php解析xml格式文件的多种方法总结介绍,DOMDocument是我们常用的解析xml一个不错的方法,下面我来给大家总结总结.

DOMElement: DOMElement DOMDocument::createElement ( string $name [, string $value ] )

创建节点元素:

String $name:节点名

String $value:节点的值

添加节点:

•DOMNode DOMNode::appendChild ( DOMNode $newnode ) 

添加子节点:

DOMNode $newnode:新节点

在dom操作中,增删改操作必须依赖于父节点

保存:

•string DOMDocument::saveXML 

保存至某个字符串中

•int DOMDocument::save ( string $filename ) 

保存至某个文件中

String $filename:文件名

删除节点

•DOMNode DOMNode::removeChild ( DOMNode $oldnode ) 

删除节点

DOMNode $oldnode:要删除的节点

更新节点

•DOMNode DOMNode::replaceChild ( DOMNode $newnode , DOMNode $oldnode ) 

DOMNode $newnode:新节点

DOMNode $oldnode:原节点

添加属性

•DOMAttr DOMElement::setAttribute( string $name , string $value ) 

string $name:属性名

string $value:属性值

修改属性

DOMAttr DOMElement::setAttribute( string $name , string $value ) 

string $name:属性名

string $value:属性值

删除属性

•bool DOMElement::removeAttribute ( string $name )

string $name:要删除的属性名称

获取属性

•string DOMElement::getAttribute ( string $name )

string $name:要获取的属性值的属性名

DOMDocument还是PHP5后推出的DOM扩展的一部分,可用来建立或解析html/xml,目前只支持utf-8编码,代码如下:

$xmlstring  = <<<XML  <?xml version= '1.0' ?>  <document>    <cmd attr= 'default' >login</cmd>    <login>imdonkey</login>  </document>  XML;    $dom  =  new  DOMDocument();  $dom ->loadXML( $xmlstring );  print_r(getArray( $dom ->documentElement));    function  getArray( $node ) {     $array  = false;       if  ( $node ->hasAttributes()) {       foreach  ( $node ->attributes  as   $attr ) {         $array [ $attr ->nodeName] =  $attr ->nodeValue;      }    }       if  ( $node ->hasChildNodes()) {       if  ( $node ->childNodes->length == 1) {         $array [ $node ->firstChild->nodeName] = getArray( $node ->firstChild);      }  else  {         foreach  ( $node ->childNodes  as   $childNode ) {         if  ( $childNode ->nodeType != XML_TEXT_NODE) {           $array [ $childNode ->nodeName][] = getArray( $childNode );        }      }    } //开源代码phpfensi.com     }  else  {       return   $node ->nodeValue;    }     return   $array ;  } 

SimpleXML

SimpleXML是PHP5后提供的一套简单易用的xml工具集,可以把xml转换成方便处理的对象,也可以组织生成xml数据,不过它不适用于包含namespace的xml,而且要保证xml格式完整(well-formed),它提供了三个方法:simplexml_import_dom、simplexml_load_file、simplexml_load_string,函数名很直观地说明了函数的作用,三个函数都返回SimpleXMLElement对象,数据的读取/添加都是通过SimpleXMLElement操作,代码如下:

$string  = <<<XML  <?xml version= '1.0' ?>  <document>    <cmd>login</cmd>    <login>imdonkey</login>  </document>  XML;    $xml  = simplexml_load_string( $string );  print_r( $xml );  $login  =  $xml ->login; //这里返回的依然是个SimpleXMLElement对象   print_r( $login );  $login  = (string)  $xml ->login; //在做数据比较时,注意要先强制转换   print_r( $login ); 

SimpleXML的优点是开发简单,缺点是它会将整个xml载入内存后再进行处理,所以在解析超多内容的xml文档时可能会力不从心,如果是读取小文件,而且xml中也不包含namespace,那SimpleXML是很好的选择.

XMLReader

XMLReader也是PHP5之后的扩展(5.1后默认安装),它就像游标一样在文档流中移动,并在每个节点处停下来,操作起来很灵活,它提供了对输入的快速和非缓存的流式访问,可以读取流或文档,使用户从中提取数据,并跳过对应用程序没有意义的记录.

以一个利用google天气api获取信息的例子展示下XMLReader的使用,这里也只涉及到一小部分函数,更多还请参考官方文档,代码如下:

$xml_uri  =  'http://www.google.com/ig/api?weather=Beijing&hl=zh-cn' ;  $current  =  array ();  $forecast  =  array ();    $reader  =  new  XMLReader();  $reader ->open( $xml_uri ,  'gbk' );  while  ( $reader ->read()) {     //get current data      if  ( $reader ->name ==  "current_conditions"  &&  $reader ->nodeType == XMLReader::ELEMENT) {       while ( $reader ->read() &&  $reader ->name !=  "current_conditions" ) {         $name  =  $reader ->name;         $value  =  $reader ->getAttribute( 'data' );         $current [ $name ] =  $value ;      }    }       //get forecast data      if  ( $reader ->name ==  "forecast_conditions"  &&  $reader ->nodeType == XMLReader::ELEMENT) {       $sub_forecast  =  array ();       while ( $reader ->read() &&  $reader ->name !=  "forecast_conditions" ) {         $name  =  $reader ->name;         $value  =  $reader ->getAttribute( 'data' );         $sub_forecast [ $name ] =  $value ;      }       $forecast [] =  $sub_forecast ;    }  }  $reader ->close(); 

XMLReader和XML Parser类似,都是边读边操作,较大的差异在于SAX模型是一个[推送]模型,其中分析器将事件推到应用程序,在每次读取新节点时通知应用程序,而使用XmlReader的应用程序可以随意从读取器提取节点,可控性更好.

由于XMLReader基于libxml,所以有些函数要参考文档看看是否适用于你的libxml版本.

查看更多关于怎么用php解析xml文件 - php高级应用的详细内容...

  阅读:40次