PHP XML Expat 解析器
使用 SimpleXML 处理 PHP XML
Section titled “使用 SimpleXML 处理 PHP XML”SimpleXML 扩展提供了一种非常直接的方式来在 PHP 中解析和浏览 XML 文档。它将 XML 文档表示为一个对象,使得数据访问感觉自然。
SimpleXML 通常是从简单、结构良好的 XML 文件或字符串中读取数据的最简单方法。
解析 XML 文档
Section titled “解析 XML 文档”您可以从文件或直接从字符串加载 XML。
示例 XML 文件(note.xml):
<?xml version="1.0" encoding="UTF-8"?><note importance="high"> <to>Tove</to> <from>Jani</from> <heading>Reminder</heading> <body>Don't forget me this weekend!</body> <tags> <tag>urgent</tag> <tag>personal</tag> </tags></note>使用 PHP 加载和解析:
<?php// 确保报告 XML 解析错误libxml_use_internal_errors(true);
$xmlFile = 'note.xml';
if (file_exists($xmlFile)) { $xml = simplexml_load_file($xmlFile);
if ($xml === false) { echo "Failed loading XML\n"; foreach(libxml_get_errors() as $error) { echo "\t", $error->message; } } else { // 作为对象属性访问元素 echo "To: " . htmlspecialchars($xml->to) . "<br>"; echo "From: " . htmlspecialchars($xml->from) . "<br>"; echo "Heading: " . htmlspecialchars($xml->heading) . "<br>"; echo "Body: " . htmlspecialchars($xml->body) . "<br>";
// 作为数组键访问属性 echo "Importance: " . htmlspecialchars($xml['importance']) . "<br>";
// 访问重复的元素(如 <tag>) echo "Tags: "; foreach ($xml->tags->tag as $tag) { echo htmlspecialchars($tag) . " "; } echo "<br>"; }} else { echo "File not found: $xmlFile";}
// 清除 libxml 错误libxml_clear_errors();
?>解释:
libxml_use_internal_errors(true):告诉底层的 libxml 库抑制错误并将其内部存储,以便我们稍后获取。simplexml_load_file():解析 XML 文件,成功时返回一个SimpleXMLElement对象,失败时返回false。- 错误处理:我们检查
$xml是否为false。如果是,我们遍历libxml_get_errors()来显示解析错误。 - 访问元素:子元素像对象属性一样访问(例如,
$xml->to,$xml->heading)。 - 访问属性:当前元素的属性像数组键一样访问(例如,
$xml['importance'])。 - 访问重复的元素:当一个元素多次出现(如
<tag>)时,访问它(例如,$xml->tags->tag)会返回一个可迭代的SimpleXMLElement对象集合,可以使用foreach进行循环遍历。 - 安全性:将 XML 数据输出到 HTML 时,使用
htmlspecialchars()以防止跨站脚本 (XSS) 漏洞。 libxml_clear_errors():处理后清除所有存储的 libxml 错误。
何时使用其他解析器
Section titled “何时使用其他解析器”- DOMDocument: 当您需要更多控制时使用,例如大量修改 XML 结构、根据 DTD/Schema 进行验证或以复杂方式处理命名空间。
- XMLReader: 用于处理极大的 XML 文件,此时将整个文档加载到内存中(像 SimpleXML 和 DOM 那样)是不可行的。它按顺序读取文件。
- XML Parser (Expat): 一个低级、基于事件的解析器。也适用于非常大的文件或特定的流处理任务,但由于其基于回调的特性,实现通常更复杂。
对于许多典型的 Web 开发任务,例如从适中大小的 XML 文件中读取配置或数据,SimpleXML 在易用性和功能性之间提供了很好的平衡。
有关 SimpleXML 函数和方法的更多详细信息,请参考官方 PHP 文档。