使用PHP DOMDocument和DOMXPath更新HTML中的链接

使用PHP DOMDocument和DOMXPath更新HTML中的链接,php,html,domdocument,Php,Html,Domdocument,所以我需要更新一些HTML中的所有图像链接。假设我的HTML如下所示: <html> <body> <div class="content"> <p><a href="example-1.html">This</a> is a normal link. I don't want to change this link.</p> <p&g

所以我需要更新一些HTML中的所有图像链接。假设我的HTML如下所示:

<html>
    <body>
        <div class="content">
            <p><a href="example-1.html">This</a> is a normal link. I don't want to change this link.</p>
            <p>But this is an image link: <a href="example-1.html"><img src="http://fpoimg.com/150"></a></p>
        </div>
    </body>
</html>
我不确定是抓取所有图像然后检查父对象,还是抓取所有链接然后检查子对象更快。我认为页面上的常规文本链接会比图片多,所以我认为前者会更快


我只是不知道该从这里走到哪里。

当您实际上想要更新
a
标记时,您应该尝试使用XPath来指向那些包含
img
标记的
a
标记。这可以通过以下XPath和代码实现:

$dom = new DOMDocument();
$dom->loadHTML( $content );
$xpath = new DOMXPath( $dom );
$anchor_list = $xpath->query( "//a[img[@src]]" );
foreach($anchor_list as $a) {
    $url = $a->getAttribute('href');
    // modify url ...
    $url = str_replace("this", "that", $url);
    $a->setAttribute('href', $url);
}
$content = $dom->saveHTML(  );
echo $content;
$dom = new DOMDocument();
$dom->loadHTML( $content );
$xpath = new DOMXPath( $dom );
$anchor_list = $xpath->query( "//a[img[@src]]" );
foreach($anchor_list as $a) {
    $url = $a->getAttribute('href');
    // modify url ...
    $url = str_replace("this", "that", $url);
    $a->setAttribute('href', $url);
}
$content = $dom->saveHTML(  );
echo $content;