如果我使用DOMDocument::loadHTMLFile()加载一个超文本标记语言页面,然后将它传递给simplexml_import_dom(),那么一切都很好。但是,如果我使用$dom->saveHTML()从DOMDocument获取字符串表示,那么使用simplexml_load_string(),我将什么都得不到。实际上,如果我使用一个非常简单的页面,它可以工作,但一旦有更复杂的东西,它就会失败,在PHP日志文件中没有任何错误。
有人能说明这一点吗?
这是不是与HTML不是可解析的XML有关?
在使用内容之前,我试图从格式化的超文本标记语言文本中去掉CR和换行符,因为它们与内容无关,而是被插入到SimpleXMLElement对象中,这是相当繁琐的。
发布于 2011-06-29 15:42:16
Is it something to do with HTML not being parsable XML?
是!超文本标记语言是一种不太严格的语法,因此simplexml_load_string不能单独使用它。这是因为simplexml很简单,而HTML很复杂。另一方面,DOMDocument被设计为能够读取错综复杂的超文本标记语言结构,这意味着既然它能够理解超文本标记语言,而simplexml能够理解它,那么您就可以弥合这一众所周知的鸿沟。
<!-- Valid HTML but not valid XML -->
<ul>
<li>foo
<li>bar
</ul>发布于 2011-06-29 15:43:05
HTML可能是有效的XML,也可能不是。当你使用loadHTMLFile时,它不一定是格式良好的xml,因为DOM是一个超文本标记语言,所以规则是不同的,但是当你向SimpleXML传递一个字符串时,它确实必须是格式良好的。
发布于 2011-06-29 16:24:41
如果我理解您的问题是正确的,并且您只是希望在输出中不使用空格,那么就不需要在这里使用simplexml。
使用:DOMDocument::preservewhitespace,如:
$dom->preserveWhiteSpace = false;在saveHTML和你准备好之前。
https://stackoverflow.com/questions/6517239
复制相似问题