【发布时间】:2015-07-17 17:51:12
【问题描述】:
我希望能够加载任何 html 文档并使用 php 的 domdocument 功能对其进行编辑。
问题是,一些网站,例如 facebook,将 XML 样式的命名空间添加到它们的标签中。
<fb:like send="true" width="450" show_faces="true"></fb:like>
DOMDocument 对脏代码非常宽容,但它不接受 html 代码中的命名空间。会发生什么:
- 如果我使用 loadHTML 加载代码,命名空间将被剥离,但我需要保留它
- 如果我使用 loadXML 加载代码,我会收到大量错误,指出我没有加载有效的 XML
所以我的想法是将获得的 html 转换为 XML,以便我可以使用 loadXML 解析它。我的问题是,我该怎么做,我应该使用哪个工具(我听说过 Tidy,但我无法让它工作)还是使用不同的解析器更好(一个可以处理 html 中的命名空间的解析器代码)
代码sn-p:
<?php
$html = file_get_contents($_POST['url']);
$domDoc = new DOMDocument();
$domDoc->loadHTML($html);
//Just do anything here. It doesn't matter what. For example I'm deleting the head tag
$headTag = $domDoc->getElementsByTagName("head")->item(0);
$headTagParent = $headTag->parentNode;
$headTagParent->removeChild($headTag);
echo $domDoc->saveHTML();
//This will work as expected for any url EXCEPT the ones that use XML namespaces like facebook does as described above. In case of such dirty coding the namespace will get deleted by DOMDocument
?>
【问题讨论】:
-
请编辑您的问题并添加您的 HTML/XML 的最小示例。
-
@Varun Naharia 很抱歉,但这对我毫无帮助。那不是我的问题的答案。
-
@michi 我真的认为这里不需要代码示例。我只想能够将任何 HTML 代码转换为 XML。随便,没什么特别的。
-
您没有将 html 转换为 doc 吗?