  | 
 xml_parse_into_struct    (PHP 3>= 3.0.8, PHP 4 ) xml_parse_into_struct -- 将 XML 数据解析到数组中 描述int  xml_parse_into_struct ( resource parser, string data, array &values [, array &index]) 
	 该函数将 XML 文件解析到两个对应的数组中,index 参数含有指向 values 数组中对应值的指针。最后两个数组参数可由指针传递给函数。
     
	 以下范例显示了由该函数生成的数组的内部结构。我们简单地将一个 note 嵌入到一个 para 标记中,解析后我们可以打印出生成的数组的结构:
      
    
	 如果您的 XML 文档很复杂,基于该文档的事件处理(Event-driven)解析(基于 expat 扩展库)也会对应的变得复杂。该函数生成的并非 DOM 风格的对象,而是横向的树状结构。因此,我们能够方便的建立表达 XML 文件数据的对象。我们假设以下 XML 文件表示一个关于氨基酸信息的小型数据库:
      例子 1. moldb.xml - 分子信息的小型数据库 <?xml version="1.0"?>
<moldb>
    <molecule>
        <name>Alanine</name>
        <symbol>ala</symbol>
        <code>A</code>
        <type>hydrophobic</type>
    </molecule>
    <molecule>
        <name>Lysine</name>
        <symbol>lys</symbol>
        <code>K</code>
        <type>charged</type>
    </molecule>
</moldb> |  
  |  
 
	 以下是解析该文档并生成相应对象的代码:
      例子 2. 
       parsemoldb.php - 将 moldb.xml 解析到分子(molecular)对象的数组中
       
<?php
  class AminoAcid {     var $name;  // aa name     var $symbol;    // three letter symbol     var $code;  // one letter code     var $type;  // hydrophobic, charged or neutral          function AminoAcid ($aa) {         foreach ($aa as $k=>$v)             $this->$k = $aa[$k];     } }
  function readDatabase($filename) {     // read the xml database of aminoacids     $data = implode("",file($filename));     $parser = xml_parser_create();     xml_parser_set_option($parser,XML_OPTION_CASE_FOLDING,0);     xml_parser_set_option($parser,XML_OPTION_SKIP_WHITE,1);     xml_parse_into_struct($parser,$data,$values,$tags);     xml_parser_free($parser);
      // loop through the structures     foreach ($tags as $key=>$val) {         if ($key == "molecule") {             $molranges = $val;             // each contiguous pair of array entries are the              // lower and upper range for each molecule definition             for ($i=0; $i < count($molranges); $i+=2) {                     $offset = $molranges[$i] + 1;                 $len = $molranges[$i + 1] - $offset;                 $tdb[] = parseMol(array_slice($values, $offset, $len));             }         } else {             continue;         }     }     return $tdb; }
  function parseMol($mvalues) {     for ($i=0; $i < count($mvalues); $i++)         $mol[$mvalues[$i]["tag"]] = $mvalues[$i]["value"];     return new AminoAcid($mol); }
  $db = readDatabase("moldb.xml"); echo "** Database of AminoAcid objects:\n"; print_r($db);
  ?>
 |  
  |  
 
	 在执行完  parsemoldb.php 后,变量  $db 将包含有一个由  AminoAcid 对象组成的数组,该脚本的输出如下:
      
    
  |   |