国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 開發(fā) > PHP > 正文

php讀取xml文件的三種實現方法

2024-05-04 21:58:38
字體:
來源:轉載
供稿:網友

文章介紹了三種方式來讀取xml文件分別是new DOMDocument(),正則解析xml,用parser函數來讀取xml數據,這些方法都是可行的,但第一種和最后一種要好一些.

new DOMDocument()實例代碼如下:

  1. <?php 
  2.   $doc = new DOMDocument(); 
  3.   $doc->load( 'books.xml' ); 
  4.    
  5.   $books = $doc->getElementsByTagName( "book" ); 
  6.   foreach$books as $book ) 
  7.   { 
  8.   $authors = $book->getElementsByTagName( "author" ); 
  9.   $author = $authors->item(0)->nodeValue; 
  10.    
  11.   $publishers = $book->getElementsByTagName( "publisher" ); 
  12.   $publisher = $publishers->item(0)->nodeValue; 
  13.    
  14.   $titles = $book->getElementsByTagName( "title" ); 
  15.   $title = $titles->item(0)->nodeValue; 
  16.    
  17.   echo "$title - $author - $publisher/n"
  18.   } 
  19.   ?> 

正則解析,代碼如下:

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

books.xml文件如下:

  1. <books> 
  2.   <book> 
  3.   <author>Jack Herrington</author> 
  4.   <title>PHP Hacks</title> 
  5.   <publisher>O'Reilly</publisher> 
  6.   </book> 
  7.   <book> 
  8.   <author>Jack Herrington</author> 
  9.   <title>Podcasting Hacks</title> 
  10.   <publisher>O'Reilly</publisher> 
  11.   </book> 
  12.   </books>  

下面就給大家舉一個小小的例子用parser函數來讀取xml數據,代碼如下:

  1. <?php 
  2. $parser = xml_parser_create(); //創(chuàng)建一個parser編輯器 
  3. xml_set_element_handler($parser"startElement""endElement");//設立標簽觸發(fā)時的相應函數 這里分別為startElement和endElenment 
  4. xml_set_character_data_handler($parser"characterData");//設立數據讀取時的相應函數 
  5. $xml_file="1.xml";//指定所要讀取的xml文件,可以是url 
  6. $filehandler = fopen($xml_file"r");//打開文件 
  7. while ($data = fread($filehandler, 4096))  
  8.     xml_parse($parser$datafeof($filehandler)); 
  9. }//每次取出4096個字節(jié)進行處理 
  10.  
  11. fclose($filehandler); 
  12. xml_parser_free($parser);//關閉和釋放parser解析器 
  13.  
  14.  
  15. $name=false; 
  16. $position=false; 
  17. function startElement($parser_instance$element_name$attrs)        //起始標簽事件的函數 
  18.  { 
  19.    global $name,$position;   
  20.    if($element_name=="NAME"
  21.    { 
  22.    $name=true; 
  23.    $position=false; 
  24.    echo "名字:"
  25.   } 
  26.   if($element_name=="POSITION"
  27.    {$name=false; 
  28.    $position=true; 
  29.    echo "職位:"
  30.   } 
  31.  
  32. function characterData($parser_instance$xml_data)                  //讀取數據時的函數  
  33.    global $name,$position
  34.    if($position
  35.     echo $xml_data."<br>"
  36.     if($name
  37.      echo $xml_data."<br>"
  38. //開源代碼Vevb.com 
  39. function endElement($parser_instance$element_name)                 //結束標簽事件的函數 
  40.  global $name,$position;  
  41. $name=false; 
  42. $position=false;   
  43.  
  44. ?> 

xml文件代碼如下:

  1. <?xml version="1.0"?> 
  2. <employees> 
  3. <employee> 
  4. <name>張三</name> 
  5. <position age="45">經理</position> 
  6. </employee> 
  7. <employees> 
  8. <employee> 
  9. <name>李四</name> 
  10. <position age="45">助理</position> 
  11. </employee> 
  12. </employees> 

parser是php內置的一個用來處理xml的解析器,它的工作由三個事件組成:起始標簽、 讀取數據、結束標簽.

也就是說在對xml進行處理的時候每當遇到起始標簽、數據和結束標簽的時候函數會做相應的動作來完成對xml數據的轉換.

發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 于田县| 岳西县| 拉萨市| 临泽县| 巧家县| 廊坊市| 余庆县| 德庆县| 凭祥市| 阳原县| 开原市| 汨罗市| 资源县| 景泰县| 湘潭市| 青川县| 新竹市| 南平市| 大厂| 苏尼特右旗| 库尔勒市| 张家口市| 民丰县| 桃园市| 剑阁县| 康马县| 从江县| 邻水| 成安县| 长沙市| 娄底市| 栾川县| 乌拉特后旗| 抚州市| 旺苍县| 正蓝旗| 昌吉市| 文昌市| 南召县| 探索| 屯留县|