我知道。它不是有效的XML。
不幸的是,它解决了使用libxml的php源代码中的错误。
Php loadHTML函数会意外地覆盖无警告和错误标记,因此如果您传递这些选项,它们永远不会将其转换为libxml。
Php的loadXML 不犯了同样的错误。所有标志按预期工作。所以我现在正在考虑使用loadXML作为替代品。不幸的是,loadXML不适合加载,比如模板片段或小部件,因为它会在单个根节点之后停止解析。像......那样......
<!--My title snippet -->
<h1>${{ title }}</h1>
<h4>${{ subtitle }}</h4>
只会部分加载loadXML。 是否有任何选项标志可以强制libxml的解析器继续运行? 或者我将不得不要求所有代码段都包含在内根节点?
注意
我已经探索了解决这个问题的其他方法。例如,通过使用LIBXML_USE_INTERNAL_ERRORS(true)或通过使用输出缓冲区捕获和清除警告。两者都有效,但两者都不令人满意,因为它们将警告和错误写入了我不想要的记忆中。
答案 0 :(得分:1)
相应的 libxml2 函数为xmlParseBalancedChunkMemory
。我可以找到PHP API间接公开此函数的唯一地方是DOMDocumentFragment::appendXML
。
$doc = new DOMDocument();
$fragment = $doc->createDocumentFragment();
$fragment->appendXML('<h1>H1</h1><h4>H4</h4>');
print $doc->saveXML($fragment);
但如果你正在尝试解析HTML,那么你可能会遇到麻烦。