面向PHP开发人员的XML 第2部分: 高级XML解析技术
2008-11-19 22:24:53 来源:WEB开发网清单 11 中的例子使用 SAX 解析大型 xml(标准化越来越近了) 文档。
清单 11. 使用 SAX 解析大型 xml(标准化越来越近了) 文件
<?php
//This class contains all the callback methods that will actually
//handle the xml(标准化越来越近了) data.
class SaxClass {
private $hit = false;
private $titleHit = false;
//callback for the start of each element
function startElement($parser_object, $elementname, $attribute) {
if ($elementname == "entry") {
if ( $attribute['ID'] == 5225) {
$this->hit = true;
} else {
$this->hit = false;
}
}
if ($this->hit && $elementname == "title") {
$this->titleHit = true;
} else {
$this->titleHit =false;
}
}
//callback for the end of each element
function endElement($parser_object, $elementname) {
}
//callback for the content within an element
function contentHandler($parser_object,$data)
{
if ($this->titleHit) {
echo trim($data)."<br />";
}
}
}
//Function to start the parsing once all values are set and
//the file has been opened
function doParse($parser_object) {
if (!($fp = fopen("tooBig.xml(标准化越来越近了)", "r")));
//loop through data
while ($data = fread($fp, 4096)) {
//parse the fragment
xml(标准化越来越近了)_parse($parser_object, $data, feof($fp));
}
}
$SaxObject = new SaxClass();
$parser_object = xml(标准化越来越近了)_parser_create();
xml(标准化越来越近了)_set_object ($parser_object, $SaxObject);
//Don't alter the case of the data
xml(标准化越来越近了)_parser_set_option($parser_object, xml(标准化越来越近了)_OPTION_CASE_FOLDING, false);
xml(标准化越来越近了)_set_element_handler($parser_object,"startElement","endElement");
xml(标准化越来越近了)_set_character_data_handler($parser_object, "contentHandler");
doParse($parser_object);
?>
结束语
PHP5 提供了多种改进的解析技术。最常见的有 DOM,它现在完全与 W3C 标准兼容,适合复杂但是相对较小的文档。Simplexml(标准化越来越近了) 适合简单而且不太大的 xml(标准化越来越近了) 文档,xml(标准化越来越近了)Reader 比 SAX 更简单、更快,是适合大型文档的流解析器。
更多精彩
赞助商链接