我正在使用DomDocument从页面上的特定div中提取内容。
然后,我想用http://example.com/test/替换路径等于http://example.com/test.php的所有链接实例。
$url = "http://pugetsoundbasketball.com/stackoverflow_sample.php";
$doc = new DomDocument('1.0', 'UTF-8');
$doc->loadHtml(file_get_contents($url));
$div = $doc->getElementById('upcoming_league_dates');
foreach ($div->getElementsByTagName('a') as $item) {
$item->setAttribute('href', 'http://example.com/test.php');
}
echo $doc->saveHTML($div);
正如您在上面的示例中看到的那样,在我使用str_replace causes
定位coming_league_dates div之后出现getElementById
个问题。我理解这一点,但不幸的是我不知道从哪里开始!
我尝试了几种不同的方法,包括在str_replace
函数上面执行getElementById
(我想我可以先替换字符串然后定位特定的div),但没有运气。
我在这里缺少什么?
编辑:更新代码以显示工作解决方案
答案 0 :(得分:2)
您不能在该节点上使用str_replace
。您需要先正确访问它。通过DOMElement
类,您可以使用方法->setAttribute()
进行替换。
示例:
$url = "http://pugetsoundbasketball.com/stackoverflow_sample.php";
$dom = new DOMDocument('1.0', 'UTF-8');
$dom->loadHTMLFile($url);
$xpath = new DOMXpath($dom); // use xpath
$needle = 'http://example.com/test/';
$replacement = 'http://example.com/test.php';
// target the link
$links = $xpath->query("//div[@id='upcoming_league_dates']/a[contains(@href, '$needle')]");
foreach($links as $anchor) {
// replacement of those href values
$anchor->setAttribute('href', $replacement);
}
echo $dom->saveHTML();
更新:修改后,您的代码现在仍在运行。这只是为了回答您在上一个问题上的逻辑替换(ala str_replace search / replace)。