我正在使用php
和DOMDocument
我需要做的是获取href
标记内的所有<a>
<h2>
在有
列表的页面上<h2><a href="blablabla">The title</a></h2>
每个<a>
<h2>
我设法实现的目标是:
<h2>
<h2>->nodeValue (caption of url)
所以我的问题在于,当我尝试在getElementsByTagName('a')
节点(#2)上执行相同的<h2>
时,php挂起(不再生成输出,页面加载停止)
我哪里做错了?感谢帮助,谢谢。
答案 0 :(得分:1)
对我来说很好,例如
<?php
$doc = new DOMDocument;
$doc->loadhtml(data());
foreach( $doc->getElementsByTagName('h2') as $h2 ) {
foreach( $h2->getElementsByTagName('a') as $a ) {
echo $a->getAttribute('href'), ': ', $a->nodeValue, "\n";
}
}
function data() {
return <<< eoh
<html>
<head><title>...</title></head>
<body>
<h2><a href="link1">header 1</a></h2>
<p>yadda yadda</p>
<h2><a href="link2">header 2</a></h2>
<p>yadda yadda</p>
<h2><a href="link3">header 3</a></h2>
<p>yadda yadda</p>
</body>
</html>
eoh;
}
但我觉得使用XPath更容易 e.g。
<?php
$doc = new DOMDocument;
$doc->loadhtml(data());
$xpath = new DOMXPath($doc);
foreach( $xpath->query('/html/body//h2/a') as $a) {
echo $a->getAttribute('href'), ": ", $a->nodeValue, "\n";
}
function data() {
return <<< eoh
<html>
<head><title>...</title></head>
<body>
<h2><a href="link1">header 1</a></h2>
<p>yadda yadda</p>
<h2><a href="link2">header 2</a></h2>
<p>yadda yadda</p>
<h2><a href="link3">header 3</a></h2>
<p>yadda yadda</p>
</body>
</html>
eoh;
}
打印
link1: header 1
link2: header 2
link3: header 3