如何使用DOMDocument

时间:2018-04-18 02:58:54

标签: php xml dom domdocument

我想从网址抓取所有链接。

但我希望它以XML格式显示。

例如,我想从此网址http://www.example.com/xxxx/

中获取所有链接

我希望它像这样打印:

<a href="http://www.example.com/yyyy/" target="_blank">anotherxxx</a>

这里是我的代码,但我收到了错误

  

致命错误:未捕获的TypeError:参数1传递给   DOMDocument :: saveXML()必须是DOMNode的实例或null,string   在C:\ xampp \ htdocs \ sh \ index.php中给出:18堆栈跟踪:#0   C:\ xampp \ htdocs \ sh \ index.php(18):DOMDocument-&gt; saveXML('/')#1 {main}   在第18行的C:\ xampp \ htdocs \ sh \ index.php中抛出

$url = "http://www.example.com/xxxx/";
$ch = curl_init();
$timeout = 5;
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, $timeout);
$html = curl_exec($ch);
curl_close($ch);
$dom = new DOMDocument();

@$dom->loadHTML($html);

foreach($dom->getElementsByTagName('a') as $link) {
        $short_link = $link->getAttribute('href');
        echo $short_link1 = $dom->saveXML($short_link);
        echo "<br />";
}

2 个答案:

答案 0 :(得分:0)

使用DOMXPath将所有链接检索为

yum install pecl

然后循环链接并将其html内容作为

$links = $xpath->query("//a/@href");

这里有完整的代码..

$dom->saveHTML($link)

答案 1 :(得分:0)

getAttribute()的调用会将属性值作为字符串返回。所以如果你只想要href那么

$short_link = $link->getAttribute('href');
echo $short_link;

...与

<a href="http://www.example.com/yyyy/" target="_blank">anotherxxx</a> 

会给你http://www.example.com/yyyy/

如果你想要锚标签本身......

foreach($dom->getElementsByTagName('a') as $link) {
        echo $dom->saveXML($link);
}

会给出

<a href="http://www.example.com/yyyy/" target="_blank">anotherxxx</a>