Php simplexml_加载_字符串()!=simplexml_import_dom()?
如果我使用Php simplexml_加载_字符串()!=simplexml_import_dom()?,php,xml,simplexml,Php,Xml,Simplexml,如果我使用DOMDocument::loadHTMLFile()加载HTML页面,然后将其传递给simplexml\u import\u dom()一切正常,但是,如果我使用$dom->saveHTML()从DOMDocument获取字符串表示,然后使用simplexml\u load\u string(),我将一无所获。事实上,如果我使用一个非常简单的页面,它会工作,但是一旦有更复杂的内容,它就会失败,PHP日志文件中不会出现任何错误 有人能解释一下吗 这与HTML不是可解析的XML有关吗 在
DOMDocument::loadHTMLFile()
加载HTML页面,然后将其传递给simplexml\u import\u dom()
一切正常,但是,如果我使用$dom->saveHTML()
从DOMDocument
获取字符串表示,然后使用simplexml\u load\u string()
,我将一无所获。事实上,如果我使用一个非常简单的页面,它会工作,但是一旦有更复杂的内容,它就会失败,PHP日志文件中不会出现任何错误
有人能解释一下吗
这与HTML不是可解析的XML有关吗
在使用内容之前,我试图从格式化的HTML文本中去掉CR和换行符,因为它们与内容无关,而是被插入到
SimpleXMLElement
对象中,这相当乏味。这与HTML不是可解析的XML有关吗?
对!!HTML是一种不太严格的语法,因此simplexml\u load\u string
本身无法使用它。这是因为simplexml
很简单,HTML很复杂。另一方面,DOMDocument被设计为能够读取复杂的HTML结构,这意味着,由于它可以理解HTML,而simplexml
可以理解它,因此可以弥合众所周知的鸿沟
<!-- Valid HTML but not valid XML -->
<ul>
<li>foo
<li>bar
</ul>
- 福
- 酒吧
HTML可能是也可能不是有效的XML。当您使用loadHTMLFile时,它不一定是格式良好的xml,因为DOM是一个HTML格式的文件,所以规则不同,但是当您将字符串传递给SimpleXML时,它确实必须是格式良好的。如果我正确地理解了您的问题,并且您只希望输出中没有空格,那么就不需要在这里使用SimpleXML
使用:
比如:
在
saveHTML
之前,您已经设置好了。有点让您想尖叫。即使使用
(及以上版本),这也是无效的。浏览器对其进行解释并不能使其成为有效的html。@Yoshi去掉了
。举个老例子。不管怎么说,
部分仍然非常常见,我也见过谷歌使用它。所以答案确实是迭代每个SimpleXMLElement元素并删除任何带有多余空格的文本节点?@cWallenPole ok,删除了我的下一票。但它仍然像地狱一样丑陋!;)嗯,不完全是。我需要使用“simplexml”来迭代内容。我想我可以使用preserveWhiteSpace,然后将内容保存到文件中,然后重新加载,但我认为从长远来看,我需要通过编程解决这个问题。
$dom->preserveWhiteSpace = false;