如何利用SAX和DOM技术实现PHP对XML文件的解析 ?

DOM解析XMl
<?php
$xmlDoc = new DOMDocument();
$xmlDoc->load("note.xml");

$x = $xmlDoc->documentElement;
foreach ($x->childNodes AS $item)
  {
  print $item->nodeName . " = " . $item->nodeValue . "<br />";
  }
?>

SAX解析:

function xstart($parser,$name,$attr){
if(strcasecmp($name,"news")==0){
  echo ("<body>");
}else if(strcasecmp($name,"title")==0){
  echo ("<h1>");
}else if(strcasecmp($name,"content")==0){
  echo ("<p><em>");
}else{
  echo ("<$name>");
}
}

function xend($parser,$name){
if(strcasecmp($name,"news")==0){
  echo ("</body>");
}else if(strcasecmp($name,"title")==0){
  echo ("</h1>");
}else if(strcasecmp($name,"content")==0){
  echo ("</em></p>");
}else{
  echo ("</$name>");
}
}

function data($parser,$data){
echo $data;
}

$parser = xml_parser_create();
xml_set_element_handler($parser,"xstart","xend");
xml_set_character_data_handler($parser,"data");

$file = "news.xml";
if(!($fp = fopen($file,"r")))
die("I/o error");
while($data = fread($fp,4096)){
if(!xml_parse($parser,$data,feof($fp)))
  die("xml error");
}


对比:使用SAX的优势在于其解析速度较快,相对于DOM而言占用内存较少
如何在 SAX 和 DOM 之间选择
     选择 DOM 还是选择 SAX,这取决于下面几个因素:
1.应用程序的目的:如果打算对数据作出更改并将它输出为 XML,那么在大多数情况下,DOM 是适当的选择。并不是说使用 SAX 就不能更改数据,但是该过程要复杂得多,因为您必须对数据的一份拷贝而不是对数据本身作出更改。
2.数据容量: 对于大型文件,SAX 是更好的选择。
数据将如何使用:如果只有数据中的少量部分会被使用,那么使用 SAX 来将该部分数据提取到应用程序中可能更好。 另一方面,如果您知道自己以后会回头引用已处理过的大量信息,那么 SAX 也许不是恰当的选择。
3.对速度的需要: SAX 实现通常要比 DOM 实现更快。
SAX 和 DOM 不是相互排斥的,记住这点很重要。您可以使用 DOM 来创建 SAX 事件流,也可以使用 SAX 来创建 DOM 树。事实上,用于创建 DOM 树的大多数解析器实际上都使用 SAX 来完成这个任务!





你可能感兴趣的:(dom,sax)