使用 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>');
我尝试将 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>');