码迷,mamicode.com
首页 > Web开发 > 详细

PHP读取XML

时间:2015-09-30 13:03:02      阅读:259      评论:0      收藏:0      [点我收藏+]

标签:

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方法
技术分享
技术分享代码
 1 <?php  2 $doc = new DOMDocument();  3 $doc->load( books.xml );  4 $books = $doc->getElementsByTagName( "book" );  5 foreach$books as $book )  6 {  7 $authors = $book->getElementsByTagName( "author" );  8 $author = $authors->item(0)->nodeValue;  9  10 $publishers = $book->getElementsByTagName( "publisher" ); 11 $publisher = $publishers->item(0)->nodeValue; 12  13 $titles = $book->getElementsByTagName( "title" ); 14 $title = $titles->item(0)->nodeValue; 15  16 echo "$title - $author - $publisher\n"; 17 echo "<br>"; 18 } 19 ?> 
技术分享

 

2.用 SAX 解析器读取 XML

 

技术分享
技术分享代码
 1 <?php  2 $g_books = array();  3 $g_elem = null;  4   5 function startElement( $parser, $name, $attrs )   6 {  7 global $g_books, $g_elem;  8 if ( $name == BOOK ) $g_books []= array();  9 $g_elem = $name; 10 } 11  12 function endElement( $parser, $name )  13 { 14 global $g_elem; 15 $g_elem = null; 16 } 17  18 function textData( $parser, $text ) 19 { 20 global $g_books, $g_elem; 21 if ( $g_elem == AUTHOR || 22 $g_elem == PUBLISHER || 23 $g_elem == TITLE ) 24 { 25 $g_bookscount$g_books ) - 1 ][ $g_elem ] = $text; 26 } 27 } 28  29 $parser = xml_parser_create(); 30  31 xml_set_element_handler$parser, "startElement", "endElement" ); 32 xml_set_character_data_handler$parser, "textData" ); 33  34 $f = fopenbooks.xml, r ); 35  36 while$data = fread$f, 4096 ) ) 37 { 38 xml_parse$parser, $data ); 39 } 40  41 xml_parser_free$parser ); 42  43 foreach$g_books as $book ) 44 { 45 echo $book[TITLE]." - ".$book[AUTHOR]." - "; 46 echo $book[PUBLISHER]."\n"; 47 } 48 ?>
技术分享

 

 

3.用正则表达式解析 XML

 

技术分享
技术分享代码
 1 <?php  2 $xml = "";  3 $f = fopenbooks.xml, r );  4 while$data = fread$f, 4096 ) ) {  5     $xml .= $data 6 }  7 fclose$f );  8   9 preg_match_all"/\<book\>(.*?)\<\/book\>/s", $xml, $bookblocks ); 10  11 foreach$bookblocks[1as $block ) 12 { 13 preg_match_all"/\<author\>(.*?)\<\/author\>/", $block, $author ); 14 preg_match_all"/\<title\>(.*?)\<\/title\>/",   $block, $title ); 15 preg_match_all"/\<publisher\>(.*?)\<\/publisher\>/", $block, $publisher ); 16 echo$title[1][0]." - ".$author[1][0]." - ".$publisher[1][0]."\n" ); 17 } 18 ?>
技术分享

 

 

4.解析XML到数 组

 

技术分享
技术分享代码
 1 <?php  2     $data = "<root><line /><content language=\"gb2312\">简单的XML数据</content></root>";  3     $parser = xml_parser_create();                        //创建解析器  4     xml_parse_into_struct($parser, $data, $values, $index);    //解析到数组  5     xml_parser_free($parser);                            //释放资源  6       7     //显示数组结构  8     echo "\n索引数组\n";  9     print_r($index); 10     echo "\n数据数组\n"; 11     print_r($values); 12 ?>
技术分享

 

5.检查XML是否有效

 

技术分享
技术分享代码
 1 <?php  2     //创建XML解析器  3     $xml_parser = xml_parser_create();  4   5     //使用大小写折叠来保证能在元素数组中找到这些元素名称  6     xml_parser_set_option($xml_parser, XML_OPTION_CASE_FOLDING, true);  7   8     //读取XML文件  9     $xmlfile = "bb.xml"; 10     if (!($fp = fopen($xmlfile, "r"))) 11     { 12         die("无法读取XML文件$xmlfile"); 13     } 14  15     //解析XML文件 16     $has_error = false;            //标志位 17     while ($data = fread($fp, 4096)) 18     { 19         //循环地读入XML文档,只到文档的EOF,同时停止解析 20         if (!xml_parse($xml_parser, $data, feof($fp))) 21         { 22             $has_error = true; 23             break; 24         } 25     } 26  27     if($has_error) 28     {  29         echo "该XML文档是错误的!<br />"; 30  31         //输出错误行,列及其错误信息 32         $error_line   = xml_get_current_line_number($xml_parser); 33         $error_row   = xml_get_current_column_number($xml_parser); 34         $error_string = xml_error_string(xml_get_error_code($xml_parser)); 35  36         $message = sprintf("[第%d行,%d列]:%s",  37                         $error_line, 38                         $error_row, 39                         $error_string); 40         echo $message; 41     } 42     else 43     { 44         echo "该XML文档是结构良好的。"; 45     } 46      47     //关闭XML解析器指针,释放资源 48     xml_parser_free($xml_parser); 49 ?>
技术分享

 

 

6.可用于精确的读取XML test.xml

技术分享
技术分享代码
 1 <?xml version="1.0" encoding="UTF-8" ?>  2     <SBMP_MO_MESSAGE>  3         <CONNECT_ID>100</CONNECT_ID>  4         <MO_MESSAGE_ID>123456</MO_MESSAGE_ID>  5         <RECEIVE_DATE>20040605</RECEIVE_DATE>  6         <RECEIVE_TIME>153020</RECEIVE_TIME>  7         <GATEWAY_ID>1</GATEWAY_ID>  8         <VALID>1</VALID>  9         <CITY_CODE>010</CITY_CODE> 10         <CITY_NAME>北京</CITY_NAME> 11         <STATE_CODE>010</STATE_CODE> 12         <STATE_NAME>北京</STATE_NAME> 13         <TP_PID>0</TP_PID> 14         <TP_UDHI>0</TP_UDHI> 15         <MSISDN>15933626501</MSISDN> 16         <MESSAGE_TYPE>8</MESSAGE_TYPE> 17         <MESSAGE>5618常年供应苗木,品种有玉兰、黄叶杨等。联系人:张三,电话:1234567890</MESSAGE> 18         <LONG_CODE>100</LONG_CODE> 19         <SERVICE_CODE>9588</SERVICE_CODE> 20     </SBMP_MO_MESSAGE> 21 test.php: 22 <?php 23 $myData = array(); 24 $file = file_get_contents("test.xml"); 25 if(strpos($file, <?xml> -1) { 26         try { 27             //加载解析xml 28             $xml = simplexml_load_string($file); 29             if($xml) { 30                 //echo $this->result; 31                 //获取节点值 32                 $CONNECT_ID = $xml->CONNECT_ID; 33                 $MO_MESSAGE_ID = $xml->MO_MESSAGE_ID; 34                 $RECEIVE_DATE = $xml->RECEIVE_DATE; 35                 $RECEIVE_TIME = $xml->RECEIVE_TIME; 36                 $GATEWAY_ID = $xml->GATEWAY_ID; 37                 $VALID = $xml->VALID; 38                 $CITY_CODE = $xml->CITY_CODE; 39                 $CITY_NAME = $xml->CITY_NAME; 40                 $STATE_CODE = $xml->CITY_CODE; 41                 $STATE_NAME = $xml->STATE_NAME; 42                 $TP_PID = $xml->TP_PID; 43                 $TP_UDHI = $xml->TP_UDHI; 44                 $MSISDN = $xml->MSISDN; 45                 $MESSAGE_TYPE = $xml->MESSAGE_TYPE; 46                 $MESSAGE = $xml->MESSAGE;//短信 47                 $LONG_CODE = $xml->LONG_CODE; 48                 $SERVICE_CODE = $xml->SERVICE_CODE; 49                 preg_match("/(561)\d{1,2}/", $MESSAGE, $code); 50                 switch($code[0]) { 51                     case 5618 : 52                         $myData[message] = $MESSAGE; 53                         break; 54                     default : 55                         $myData[] = 没有短消息。; 56                         break; 57                     } 58                      59                 } else { 60                     echo "加载xml文件错误。"; 61                 } 62              63         } catch(exception $e){ 64             print_r($e); 65         } 66  67 else { 68     echo "没有该XML文件。"; 69 } 70  71 echo "<pre>"; 72 print_r($myData); 73 echo "<hr>"; 74 echo $myData[message]; 75 ?>

PHP读取XML

标签:

原文地址:http://www.cnblogs.com/dhsx/p/4848814.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!