simplexml_load_string()!= simplexml_import_dom()?

时间:2011-06-29 07:38:18

标签: php xml simplexml

如果我使用DOMDocument::loadHTMLFile()加载HTML页面,然后将其传递给simplexml_import_dom()一切正常,但是,如果我使用$dom->saveHTML()DOMDocument获取字符串表示形式然后使用simplexml_load_string(),我什么都没得到。实际上,如果我使用一个非常简单的页面,它将起作用,但只要有更复杂的事情,它就会在PHP日志文件中失败而没有任何错误。

有人能说清楚这个吗?

是否与HTML不可解析的XML有关?

我试图在使用内容之前从格式化的HTML文本中删除CR和换行符,因为它们与内容无关但插入到SimpleXMLElement对象中,这相当繁琐。

3 个答案:

答案 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之前

并且您已设置。