我正在尝试使用我为我的网站页面(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'示例?
感谢您提供任何指导。
答案 0 :(得分:3)
我试过这个,它只是抛出错误:
$xpath->query("//img[@src='blue.png']")->remove();
文档的哪些部分确实让您认为remove
是DOMNodeList
的一种方法?使用DOMNode::removeChild
foreach($xpath->query("//img[@src='blue.png']") as $node){
$node->parentNode->removeChild($node);
}
我建议在所有课程中浏览一下&来自DOM
扩展(不仅仅是PHP的BTW)的函数,让我们有点了解在哪里找到它。
旁注:如果您可以在原始blue.php
中获得切换,导致输出不同,则资源效率可能更高,因为此解决方案(额外的http请求,完整的DOM加载和操作)与此相比,有很多不必要的开销。