Skip to content

php_ref_xml

PHP 提供了强大的工具来读取、操作和创建 XML 文档。XML (Extensible Markup Language,可扩展标记语言) 是一种广泛使用的数据结构化和交换格式。

现代 PHP 为处理 XML 提供了几个扩展,每个都适用于不同的任务:

  • SimpleXML: 非常适合轻松读取和遍历简单的 XML 结构。它将 XML 文档视为一个对象。
  • DOM (Document Object Model): 一种更健壮、基于标准的方法。它将整个 XML 文档作为树结构加载到内存中,允许进行复杂的导航、修改和验证。
  • XMLReader & XMLWriter: 基于流的解析器/编写器。它们逐个节点地读取或写入 XML,这使得它们在处理非常大的文件时非常节省内存,但使用起来通常比 SimpleXML 或 DOM 更复杂。
  • XML Parser (Expat): 一种低级别的、基于事件的解析器。它将 XML 处理为一系列事件(例如,元素开始、元素结束、字符数据)。它速度快且内存效率高,但需要为每个事件设置回调函数。

对于大多数常见任务,如读取配置文件或简单的数据流,SimpleXML 通常是最简单的选择。对于复杂的操纵、从头创建文档或根据 Schema 进行验证,通常首选 DOM。

您可以在一般的 Web 开发资源中找到更多关于 XML 本身的信息。

SimpleXML、DOM 和 XML Parser (Expat) 扩展通常在现代 PHP 安装中默认启用,因为它们是 PHP 核心的一部分。XMLReader 和 XMLWriter 也可能包含在内,或者需要在 PHP 编译/安装期间启用。

您可以使用 phpinfo() 或 extension_loaded('simplexml') / extension_loaded('dom') 来验证某个扩展是否已启用。

主要的 XML 处理函数/方法 (SimpleXML 和 DOM)

Section titled “主要的 XML 处理函数/方法 (SimpleXML 和 DOM)”

以下是 SimpleXML 和 DOM 扩展中一些常用的函数和方法:

SimpleXML:

  • simplexml_load_file(string $filename): 将 XML 文件解析为 SimpleXMLElement 对象。
  • simplexml_load_string(string $data): 将 XML 字符串解析为 SimpleXMLElement 对象。
  • $sxe->elementName: 访问子元素。
  • $sxe[‘attributeName’]: 访问属性。
  • $sxe->xpath(string $path): 对 XML 数据执行 XPath 查询。

DOMDocument:

  • new DOMDocument(string $version = ‘1.0’, string $encoding = ‘UTF-8’): 创建新的 DOM 文档对象。
  • $dom->load(string $filename): 从文件加载 XML。
  • $dom->loadXML(string $source): 从字符串加载 XML。
  • $dom->save(string $filename): 将内部 XML 树保存回文件。
  • $dom->saveXML(?DOMNode $node = null): 将内部 XML 树输出为字符串。
  • $dom->createElement(string $name, ?string $value = null): 创建新的元素节点。
  • $dom->createTextNode(string $content): 创建新的文本节点。
  • $dom->createAttribute(string $name): 创建新的属性。
  • $node->appendChild(DOMNode $newnode): 在子节点列表末尾添加新的子节点。
  • $dom->getElementById(string $elementId): 通过 ID 获取元素。
  • $dom->getElementsByTagName(string $name): 通过标签名获取元素。
  • $dom->validate() / $dom->schemaValidate(string $filename): 根据其 DTD 或 XSD Schema 验证文档(需要 libxml)。

注意: 在解析 XML 时,适当的错误处理(通常使用 libxml_use_internal_errors(true) 并检查 libxml_get_errors())至关重要,因为格式错误的文档可能会导致问题。

字符编码: 确保您的 XML 文档的编码声明(例如,<?xml version="1.0" encoding="UTF-8"?>)与实际的文件编码匹配。在整个应用程序中始终使用 UTF-8 以避免编码问题。如果需要复杂的转换,通常应避免使用较旧的 utf8_encode() 和 utf8_decode() 函数,而应采用适当的编码管理或使用 mb_string 扩展。