这是我的代码:
<?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_dump
和print_r
或任何一个都会返回一个空的对象元素。
http://www.php.net/manual/en/class.domelement.php#86224
这家伙提供了一个更好用的解决方案:
$xml = $XML->saveXML($XML);
echo "<pre>" . print_r($xml, 1) . "</pre>";
但是,当我重新加载页面时,看起来只有空格,因为我看不到任何东西,但我可以选择它......
问题出在哪里,你们有没有解决方案?
答案 0 :(得分:0)
我遇到了同样的问题。似乎HTML验证代码对错误非常敏感。如果你打开警告,你可能会在加载HTML内容时看到一堆警告(至少对我来说是加载远程页面的情况)。
我发现它特别挂在HTML实体上。它似乎也赶上了用javascript编译的HTML标签。
我试图通过用&
取代&
来破解它,看看我是否能够获得正确解析的对象。我虽然继续在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
?