为什么getElementsByTagName在此示例中不起作用

时间:2014-05-07 07:45:50

标签: php xml domdocument getelementsbytagname

我有一个包含此内容的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);

但是我变得空了。知道为什么吗?

谢谢

2 个答案:

答案 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')); 
  }
}

输出:https://eval.in/147576

string(28) "forMerrin_files/image020.png"