如果我使用DOMDocument::loadHTMLFile()
加载HTML页面,然后将其传递给simplexml_import_dom()
一切正常,但是,如果我使用$dom->saveHTML()
从DOMDocument
获取字符串表示形式然后使用simplexml_load_string()
,我什么都没得到。实际上,如果我使用一个非常简单的页面,它将起作用,但只要有更复杂的事情,它就会在PHP日志文件中失败而没有任何错误。
有人能说清楚这个吗?
是否与HTML不可解析的XML有关?
我试图在使用内容之前从格式化的HTML文本中删除CR和换行符,因为它们与内容无关但插入到SimpleXMLElement
对象中,这相当繁琐。
答案 0 :(得分:2)
Is it something to do with HTML not being parsable XML?
YES! HTML是一种非常严格的语法,因此simplexml_load_string
本身不能使用它。这是因为simplexml
很简单,HTML也很复杂。另一方面,DOMDocument旨在能够读取复杂的HTML结构,这意味着既然它可以理解HTML并且simplexml
可以理解它,那么你可以弥合那里众所周知的差距。
<!-- Valid HTML but not valid XML -->
<ul>
<li>foo
<li>bar
</ul>
答案 1 :(得分:0)
HTML可能是也可能不是有效的XML。当你使用loadHTMLFile时,它不一定必须是格式良好的xml,因为DOM是一个非常规则的HTML,但是当你将一个字符串传递给SimpleXML时,它确实必须很好地形成。
答案 2 :(得分:0)
如果我的问题与您的问题相关,并且您只是希望输出中没有空格,则无需在此处使用simplexml
。
使用:DOMDocument::preservewhitespace 像:
$dom->preserveWhiteSpace = false;
在saveHTML
之前并且您已设置。