DOM返回空对象

时间:2012-01-30 23:04:01

标签: php dom object

这是我的代码:

<?php
$content = utf8_encode( file_get_contents( "data.xml") );
$XML = new DOMDocument();
$XML->loadXML($content);

echo "<pre>" . print_r($XML, 1) . "</pre>";
?>

它确实返回:

 DOMDocument Object
(
)

我已经读过它的错误或其他内容,因为var_dumpprint_r或任何一个都会返回一个空的对象元素。

http://www.php.net/manual/en/class.domelement.php#86224

这家伙提供了一个更好用的解决方案:

$xml = $XML->saveXML($XML);
echo "<pre>" . print_r($xml, 1) . "</pre>";

但是,当我重新加载页面时,看起来只有空格,因为我看不到任何东西,但我可以选择它......

问题出在哪里,你们有没有解决方案?

3 个答案:

答案 0 :(得分:0)

我遇到了同样的问题。似乎HTML验证代码对错误非常敏感。如果你打开警告,你可能会在加载HTML内容时看到一堆警告(至少对我来说是加载远程页面的情况)。

我发现它特别挂在HTML实体上。它似乎也赶上了用javascript编译的HTML标签。

我试图通过用&取代&amp;来破解它,看看我是否能够获得正确解析的对象。我虽然继续在JS上犯错误。

基本上,确保显示调试输出并检查警告。内容可能最终成为问题所在。

编辑: 我做了一些搜索,发现这个库似乎与DOMDocument非常相似,但似乎没有在HTML中的小问题上爆炸: http://simplehtmldom.sourceforge.net/

我能够加载我遇到问题的网页 - 没有错误。在未来的项目中可能值得一试。

答案 1 :(得分:0)

作者忘记添加的是htmlspecialchars()

$xml = $XML->saveXML($XML);
echo "<pre>", htmlspecialchars($xml, ENT_QUOTES, 'UTF-8'), "</pre>";

没有它,XML输出不会被转义,你将看不到标签。

答案 2 :(得分:-1)

var_dump上的DOMDocument始终返回空对象。

插图:

$xml = simplexml_load_file('test.xml'); //load your xml

var_dump($xml); //var_dump via SimpleXML (lot of data)

$doc = new DOMDocument(); //fire up domdocument

$xmlstring = $xml->asXML(); //convert SimpleXML to string

$doc->loadXML($xmlstring);  //loads perfectly 

var_dump($doc); //empty object

也许你应该考虑SimpleXML