面向PHP开发人员的XML 第2部分: 高级XML解析技术
2008-11-19 22:24:53 来源:WEB开发网最后一个例子(参见清单 9)结合使用了 Simplexml(标准化越来越近了) 以及 DOM 和 xml(标准化越来越近了)Reader。通过 xml(标准化越来越近了)Reader,每次使用 expand() 传递一个元素的数据。这样就能将 xml(标准化越来越近了)Reader 传递的节点转换成 DOMElement 再传递给 Simplexml(标准化越来越近了) 了。
清单 9. 结合 Simplexml(标准化越来越近了) 以及 DOM 和 xml(标准化越来越近了)Reader 解析大型 xml(标准化越来越近了) 文档
<?php
// Parsing a large document with Expand and Simplexml(标准化越来越近了)
$reader = new xml(标准化越来越近了)Reader();
$reader->open("tooBig.xml(标准化越来越近了)");
while ($reader->read()) {
switch ($reader->nodeType) {
case (xml(标准化越来越近了)READER::ELEMENT):
if ($reader->localName == "entry") {
if ($reader->getAttribute("ID") == 5225) {
$node = $reader->expand();
$dom = new DomDocument();
$n = $dom->importNode($node,true);
$dom->appendChild($n);
$sxe = simplexml(标准化越来越近了)_import_dom($n);
echo $sxe->title;
}
}
}
}
?>
基于流的解析器
之所以称为基于流的解析器,是因为它们采用和流式音频同样的原理来解析 xml(标准化越来越近了) 流,处理一个特殊节点,完成之后则将其完全忘掉。xml(标准化越来越近了)Reader 是一种 pull 解析器,其编码方法和数据库查询结果表的游标中非常类似。因此更容易处理不熟悉的或者不可预测的 xml(标准化越来越近了) 文件。
使用 xml(标准化越来越近了)Reader 解析
xml(标准化越来越近了)Reader 扩展是一种基于流的解析器,其类型通常被称为游标类型或者 pull 类型解析器。xml(标准化越来越近了)Reader 根据请求从 xml(标准化越来越近了) 文档中获取信息。它是基于派生自 C# xml(标准化越来越近了)TextReader 的 API。PHP 5.1 默认包含并启用它,基于 libxml(标准化越来越近了)2。在 PHP 5.1 之前,默认不启用 xml(标准化越来越近了)Reader 扩展,但是可从 PECL(请参阅 参考资料 中的相关链接)下载。xml(标准化越来越近了)Reader 支持名称空间和验证,包括 DTD 和 Relaxed NG。
更多精彩
赞助商链接