包含/排除xPath / DOM的内容> PHP

时间:2012-02-07 21:00:42

标签: php dom xpath

我正在尝试使用我为我的网站页面(blue.php)构建的现有php文件,并使用某些xPath获取我真正想要的部分以创建该页面的不同版本(蓝色-2.php)。

我已成功使用

提取现有的.php文件
$documentSource = file_get_contents("http://mysite.com/blue.php");

我可以更改属性,并在blue-2.php中正确反映我的更改,例如:

$xpath->query("//div[@class='walk']");
foreach ($xpath->query("//div[@class='walk']") as $node) {
$source = $node->getAttribute('class');
$node->setAttribute('class', 'run');

使用我当前的代码,我仅限于在上面的示例中进行更改。我真正希望能够做的是删除/排除某些div和其他元素在我的新php页面上显示(blue-2.php)。

通过在我的代码末尾使用echo $doc->saveHTML();,当我只想输出某些元素而排除其他元素时,看起来blue.php中的所有内容都包含在blue-2.php的输出中。 / p>

所以问题的实质是:

我可以使用$documentSource = file_get_contents("http://mysite.com/blue.php");解析整个页面,并选择(包含和排除)使用xPath在我的新页面上显示哪些元素?或者我仅限于对现有代码进行修改,例如上面的'div class walk / run'示例?

感谢您提供任何指导。

1 个答案:

答案 0 :(得分:3)

  

我试过这个,它只是抛出错误:

$xpath->query("//img[@src='blue.png']")->remove();

文档的哪些部分确实让您认为removeDOMNodeList的一种方法?使用DOMNode::removeChild

foreach($xpath->query("//img[@src='blue.png']") as $node){
    $node->parentNode->removeChild($node);
}

我建议在所有课程中浏览一下&来自DOM扩展(不仅仅是PHP的BTW)的函数,让我们有点了解在哪里找到它。

旁注:如果您可以在原始blue.php中获得切换,导致输出不同,则资源效率可能更高,因为此解决方案(额外的http请求,完整的DOM加载和操作)与此相比,有很多不必要的开销。