欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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

程序员文章站 2022-05-22 16:46:53
...
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 来完成这个任务!





相关标签: SAX DOM