特定元素上的简单PHP saveHTML返回NULL

时间:2013-12-13 00:21:57

标签: php wordpress dom xpath domdocument

目标是从本地存储的html文件中提取元素,并在执行php脚本时将其插入当前页面。这是我的第一个主要的PHP项目,所以我希望问题很简单(我为任何非技术语言道歉),但是,正如您将看到的,我无法解决它。

我的代码如下所示:

<?php 
    $path = $_SERVER["DOCUMENT_ROOT"]."/bglibrary/background.html";
    $html = new DOMDocument();
    $html->loadHtmlFile($path);
    $xpath = new DOMXPath ( $html );
    $background = $xpath->query("//*[@id='background-wrapper']");


    var_dump($background); // object(DOMNodeList)#307 (0) { } 
    var_dump($background->item(0)); // object(DOMElement)#306 (0) { }
    var_dump($background->item(1)); // NULL

    var_dump($html->saveHTML($background)); // NULL
    var_dump($html->saveHTML($background->item(0))); // NULL


    echo $html->saveHTML(); //Prints full html of the target page
?>

var_dump命令用于调试,它们说明了问题。我认为x-path查询是成功的,因为它只返回一个包含一个项目的节点列表(查询列表中的第二个项目返回NULL)。此外,项目本身被标识为dom元素。

但是我无法以任何形式使用saveHTML (包括找到目标节点的父节点,然后在其中查找元素以尝试保存它),或{{ 1}}或saveXML,用于返回,回显,打印或转储所需元素。我也尝试使用saveHTMLfile php函数获得完全相同的结果。

如果它是一个因素,我的html(也很简单)也会跟随;

getElementById

最后,如果您认为html文件无法以某种方式正确访问,那么我的php中的最终<!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>Holding File for Images</title> <style type="text/css"> ... some styling </style> </head> <body> <div id="background-wrapper"> <div id="background1" dataalt="no" class="background"> ...A whole load of div elements </div> <div id="background2" class="background"> ...A whole load of div elements </div> </div> </body> </html> 会成功输出我刚刚列出的整个html文件,并且渲染效果很好。


今年remyable提出了一个非常相似的问题,除了根据另一个用户的代码似乎运行正常之外没有得到答案。我可以向你保证,这段代码并没有类似的变化似乎运行正常,因此我怀疑问题可能在于我的服务器设置。我正在wordpress站点的header.php文件中执行PHP,该站点使用MAMP在本地托管运行。 MAMP服务器根目录不是'wordpress'文件(因为我也在处理一些非wordpress的东西),因此我使用echo $html->saveHTML();命令来查找我的html文件。与此案例相关的文件路径为:

root / wordpress / wp-content / themes / FirstTheme / header.php(正在执行php的地方)

root / bglibrary / background.html(目标HTML文件所在的位置)

1 个答案:

答案 0 :(得分:3)

saveHTML函数的参数仅在php 5.3.6中添加

所以,您需要安装新版本的php才能使用它或尝试从5.2.0开始的C14N方法:

echo $background->item(0)->C14N();