Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php simplexml_加载_字符串()!=simplexml_import_dom()?_Php_Xml_Simplexml - Fatal编程技术网

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;