PHP讀取XML檔案的方法的執行個體代碼

來源:互聯網
上載者:User

本文執行個體總結了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.用Regex解析 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

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.