【问题标题】:DOM returns empty objectDOM 返回空对象
【发布时间】:2012-02-22 17:38:52
【问题描述】:

这是我的代码:

<?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>";

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

问题出在哪里,你们有什么解决办法吗?

【问题讨论】:

  • data.xml 是一个有效的 XML 文件吗?
  • 如果你只是die($content)会发生什么?
  • saveXML() 返回一个你不需要的字符串 print_r
  • 不要指望var_dumpprint_r 处理DOM 对象,它们不会向您显示它们的内容。另外,只看页面的来源,不要依赖&lt;pre&gt;'s...之类的东西...
  • nachito:是的,它是一个有效的文件。 Ben D:没什么,只是空白页。

标签: php dom object


【解决方案1】:

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

我发现它特别依赖于 HTML 实体。它似乎也被用 javascript 编译的 HTML 标签所吸引。

我试图通过用&amp;amp; 替换&amp; 来破解它,只是为了看看我是否能够取回正确解析的对象。不过,我继续在 JS 上遇到错误。

基本上,确保调试输出可见并检查警告。内容可能最终成为这里的问题。

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

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

【讨论】:

    【解决方案2】:

    作者忘记添加的是htmlspecialchars()

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

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

    【讨论】:

      【解决方案3】:

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

      插图:

      $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

      【讨论】:

      • 据我所知,在 PHP 5.4 之前,没有内部类使用var_dump 公开属性。不过,这并不一定意味着它们是空的。
      猜你喜欢
      • 2011-09-18
      • 1970-01-01
      • 2014-09-29
      • 2015-02-11
      • 2020-12-21
      • 2019-04-08
      • 2019-07-17
      • 2018-08-03
      • 2022-01-11
      相关资源
      最近更新 更多