使用 PHP DOMDocument 解析 XML 类文档

Parsing XML-like document with PHP DOMDocument

我尝试将 EPUB 索引的 XML 类结构解析为 PHP DOMDocument

$doc = new DOMDocument();
$xml = '
      <navPoint playOrder="1" id="np-1">
        <navLabel>
          <text>I</text>
        </navLabel>
        <content src="/1.html"/>
      </navPoint>
      <navPoint playOrder="2" id="np-2">
        <navLabel>
          <text>II</text>
        </navLabel>
        <content src="/2.html"/>
      </navPoint>
';

@$doc->loadHTML('<?xml encoding="utf-8" ?>
<html><head></head><body>' . $xml . '</body></html>');

$output = $doc->getElementsByTagName('navPoint');

print_r($output);

但是 returns

DOMNodeList Object
(
    [length] => 0
)

我做错了什么,它没有将其解析为简单的 HTML 文档?

P.S。我也尝试了 PHP XML 解析器,但由于它不是实际的 XML 文档,它会因为 XML 无效而出错。因此,我更愿意将其视为 HTML 文档。

您正在寻找 loadXML,而不是 loadHTML

不需要用 HTML 标签包围所有内容,只需添加一个虚拟 <root> 项,因为任何有效的 XML 文档都必须有一个(您也可以将其添加到$xml 变量本身)。

此外,在 99% 的情况下应避免在函数调用之前使用 @,它可以防止您 seeing/understanding 出了什么问题。

下面应该这样做:

$doc->loadXML('<root>' . $xml . '</root>');

此处演示:https://3v4l.org/s8QvM