面向PHP开发人员的XML 第2部分: 高级XML解析技术
2008-11-19 22:24:53 来源:WEB开发网清单 1 中的例子用 DOM 解析文档,通过 getElementById 检索一个元素。引用 ID 之前需要设置 validateOnParse=true 来验证文档。根据 DOM 标准,它要求 DTD 定义一个 ID 类型的属性 ID。
清单 1. 使用 DOM 处理基本文档
<?php
$doc = new DomDocument;
// We must validate the document before referring to the id
$doc->validateOnParse = true;
$doc->Load('basic.xml(标准化越来越近了)');
echo "The element whose id is myelement is: " .
$doc->getElementById('myelement')->tagName . "n";
?>
getElementsByTagName() 函数返回类 DOMNodeList 的一个新实例,包含使用给定标记名的元素。当然这个列表需要遍历。迭代 getElementsByTagName() 返回的 NodeList 的同时修改文档结构,会影响迭代的 NodeList(参见清单 2)。不需要验证。
清单 2. DOM getElementsByTagName 方法
DOMDocument {
DOMNodeList getElementsByTagName(string name);
}
清单 3 中的例子结合使用了 DOM 和 XPath。
清单 3. 使用 DOM 和 XPath 进行解析
<?php
$doc = new DOMDocument;
// We don't want to bother with white spaces
$doc->preserveWhiteSpace = false;
$doc->Load('book.xml(标准化越来越近了)');
$xpath = new DOMXPath($doc);
// We start from the root element
$query = '//book/chapter/para/informaltable/tgroup/tbody/row/entry[. = "en"]';
$entries = $xpath->query($query);
foreach ($entries as $entry) {
echo "Found {$entry->previousSibling->previousSibling->nodeValue}," .
" by {$entry->previousSibling->nodeValue}n";
}
?>
更多精彩
赞助商链接