本文實例總結了PHP讀取XML格式文件的方法。分享給大家供大家參考,具體如下:
books.xml文件:
<books><book><author>Jack Herrington</author><title>PHP Hacks</title><publisher>O'Reilly</publisher></book><book><author>Jack Herrington</author><title>Podcasting Hacks</title><publisher>O'Reilly</publisher></book></books>
1.DOMDocument方法
<?php$doc = new DOMDocument();$doc->load( 'books.xml' );$books = $doc->getElementsByTagName( "book" );foreach( $books as $book ){$authors = $book->getElementsByTagName( "author" );$author = $authors->item(0)->nodeValue;$publishers = $book->getElementsByTagName( "publisher" );$publisher = $publishers->item(0)->nodeValue;$titles = $book->getElementsByTagName( "title" );$title = $titles->item(0)->nodeValue;echo "$title - $author - $publisher/n";echo "<br>";}?>2.用 SAX 解析器讀取 XML:
<?php$g_books = array();$g_elem = null;function startElement( $parser, $name, $attrs ) {global $g_books, $g_elem;if ( $name == 'BOOK' ) $g_books []= array();$g_elem = $name;}function endElement( $parser, $name ) {global $g_elem;$g_elem = null;}function textData( $parser, $text ){global $g_books, $g_elem;if ( $g_elem == 'AUTHOR' ||$g_elem == 'PUBLISHER' ||$g_elem == 'TITLE' ){$g_books[ count( $g_books ) - 1 ][ $g_elem ] = $text;}}$parser = xml_parser_create();xml_set_element_handler( $parser, "startElement", "endElement" );xml_set_character_data_handler( $parser, "textData" );$f = fopen( 'books.xml', 'r' );while( $data = fread( $f, 4096 ) ){xml_parse( $parser, $data );}xml_parser_free( $parser );foreach( $g_books as $book ){echo $book['TITLE']." - ".$book['AUTHOR']." - ";echo $book['PUBLISHER']."/n";}?>3.用正則表達式解析 XML:
<?php$xml = "";$f = fopen( 'books.xml', 'r' );while( $data = fread( $f, 4096 ) ) {  $xml .= $data; }fclose( $f );preg_match_all( "//<book/>(.*?)/<//book/>/s", $xml, $bookblocks );foreach( $bookblocks[1] as $block ){preg_match_all( "//<author/>(.*?)/<//author/>/", $block, $author );preg_match_all( "//<title/>(.*?)/<//title/>/",  $block, $title );preg_match_all( "//<publisher/>(.*?)/<//publisher/>/", $block, $publisher );echo( $title[1][0]." - ".$author[1][0]." - ".$publisher[1][0]."/n" );}?>4.解析XML到數組
<?php $data = "<root><line /><content language=/"gb2312/">簡單的XML數據</content></root>"; $parser = xml_parser_create(); //創建解析器 xml_parse_into_struct($parser, $data, $values, $index); //解析到數組 xml_parser_free($parser); //釋放資源 //顯示數組結構 echo "/n索引數組/n"; print_r($index); echo "/n數據數組/n"; print_r($values);?>
5.檢查XML是否有效
<?php  //創建XML解析器  $xml_parser = xml_parser_create();  //使用大小寫折疊來保證能在元素數組中找到這些元素名稱  xml_parser_set_option($xml_parser, XML_OPTION_CASE_FOLDING, true);  //讀取XML文件  $xmlfile = "bb.xml";  if (!($fp = fopen($xmlfile, "r")))  {    die("無法讀取XML文件$xmlfile");  }  //解析XML文件  $has_error = false;      //標志位  while ($data = fread($fp, 4096))  {    //循環地讀入XML文檔,只到文檔的EOF,同時停止解析    if (!xml_parse($xml_parser, $data, feof($fp)))    {      $has_error = true;      break;    }  }  if($has_error)  {     echo "該XML文檔是錯誤的!<br />";    //輸出錯誤行,列及其錯誤信息    $error_line  = xml_get_current_line_number($xml_parser);    $error_row  = xml_get_current_column_number($xml_parser);    $error_string = xml_error_string(xml_get_error_code($xml_parser));    $message = sprintf("[第%d行,%d列]:%s",             $error_line,            $error_row,            $error_string);    echo $message;  }  else  {    echo "該XML文檔是結構良好的。";  }  //關閉XML解析器指針,釋放資源  xml_parser_free($xml_parser);?>6.可用于精確的讀取XML
test.xml
<?xml version="1.0" encoding="UTF-8" ?> <SBMP_MO_MESSAGE> <CONNECT_ID>100</CONNECT_ID> <MO_MESSAGE_ID>123456</MO_MESSAGE_ID> <RECEIVE_DATE>20040605</RECEIVE_DATE> <RECEIVE_TIME>153020</RECEIVE_TIME> <GATEWAY_ID>1</GATEWAY_ID> <VALID>1</VALID> <CITY_CODE>010</CITY_CODE> <CITY_NAME>北京</CITY_NAME> <STATE_CODE>010</STATE_CODE> <STATE_NAME>北京</STATE_NAME> <TP_PID>0</TP_PID> <TP_UDHI>0</TP_UDHI> <MSISDN>15933626501</MSISDN> <MESSAGE_TYPE>8</MESSAGE_TYPE> <MESSAGE>5618常年供應苗木,品種有玉蘭、黃葉楊等。聯系人:張三,電話:1234567890。</MESSAGE> <LONG_CODE>100</LONG_CODE> <SERVICE_CODE>9588</SERVICE_CODE> </SBMP_MO_MESSAGE>
test.php:
<?php$myData = array();$file = file_get_contents("test.xml");if(strpos($file, '<?xml') > -1) {    try {      //加載解析xml      $xml = simplexml_load_string($file);      if($xml) {        //echo $this->result;        //獲取節點值        $CONNECT_ID = $xml->CONNECT_ID;        $MO_MESSAGE_ID = $xml->MO_MESSAGE_ID;        $RECEIVE_DATE = $xml->RECEIVE_DATE;        $RECEIVE_TIME = $xml->RECEIVE_TIME;        $GATEWAY_ID = $xml->GATEWAY_ID;        $VALID = $xml->VALID;        $CITY_CODE = $xml->CITY_CODE;        $CITY_NAME = $xml->CITY_NAME;        $STATE_CODE = $xml->CITY_CODE;        $STATE_NAME = $xml->STATE_NAME;        $TP_PID = $xml->TP_PID;        $TP_UDHI = $xml->TP_UDHI;        $MSISDN = $xml->MSISDN;        $MESSAGE_TYPE = $xml->MESSAGE_TYPE;        $MESSAGE = $xml->MESSAGE;//短信        $LONG_CODE = $xml->LONG_CODE;        $SERVICE_CODE = $xml->SERVICE_CODE;        preg_match("/(561)/d{1,2}/", $MESSAGE, $code);        switch($code[0]) {          case 5618 :            $myData[message] = $MESSAGE;            break;          default :            $myData[] = '沒有短消息。';            break;          }        } else {          echo "加載xml文件錯誤。";        }    } catch(exception $e){      print_r($e);    }} else {  echo "沒有該XML文件。";}echo "<pre>";print_r($myData);echo "<hr>";echo $myData[message];?>希望本文所述對大家PHP程序設計有所幫助。
新聞熱點
疑難解答
圖片精選