我有一个包含此内容的DomElement:
$cell = <td colspan=3>
<p class=5tablebody>
<span style='position:relative;top:14.0pt'>
<img width=300 height=220 src="forMerrin_files/image020.png">
</span>
</p>
</td>
在那里,我正在使用:
来确定p元素$paragraphs = $xpath->query('.//p', $cell);
我的目标是从cell元素中获取img元素。
我试过了:
$paragraph->getElementsByTagName('img')->item(0);
但是我变得空了。知道为什么吗?
谢谢
答案 0 :(得分:1)
这是你追求的吗?
$htmlStr = '<td colspan=3>
<p class=5tablebody>
<span style=\'position:relative;top:14.0pt\'>
<img width=300 height=220 src="forMerrin_files/image020.png">
</span>
</p>
</td>';
$doc = new DOMDocument();
$doc->loadHTML($htmlStr);
$paragraphs = $doc->getElementsByTagName('img');
var_dump($paragraphs->item(0)->getAttribute('src'));
输出:
string 'forMerrin_files/image020.png' (length=28)
答案 1 :(得分:1)
DOMXpath :: query()的第二个参数必须是一个上下文节点,你不能只使用一些HTML字符串。无论如何,我建议使用DOMXpath :: evaluate()。两种方法的语法相同,但query()
仅限于返回节点列表的Xpath表达式,evaluate()
也允许返回标量的Xpath表达式。
$html = <<<HTML
<td colspan=3>
<p class=5tablebody>
<span style='position:relative;top:14.0pt'>
<img width=300 height=220 src="forMerrin_files/image020.png">
</span>
</p>
</td>
HTML;
$dom = new DOMDocument();
$dom->loadHtml($html);
$xpath = new DOMXpath($dom);
// for each td element
foreach ($xpath->evaluate('//td') as $cell) {
// for each img inside a p
foreach ($xpath->evaluate('.//p//img', $cell) as $img) {
var_dump($img->getAttribute('src'));
}
}
string(28) "forMerrin_files/image020.png"