php DomXPath - 如何仅在当前节点而不是子节点中获取图像?
我只需要获取当前节点中而不是子节点中的图像
我只想获取没有 not_important.gif
图像的绿色/黄色/红色/黑色
图像
我可以使用查询'.//table/tr/td/img'
但我需要在循环内使用它,
<?php
/////////////////////////////////////////////////////////////////////
$html='
<table>
<tr>
<td colspan="2">
<span>
<img src="not_important.gif" />
</span>
<img src="green.gif" />
</td>
</tr>
<tr>
<td>
<span>yellow</span>
<img src="yellow.gif" />
</td>
<td>
<span>red</span>
<img src="red.gif" />
</td>
</tr>
</table>
<table>
<tr>
<td>
<span>
<img src="not_important.gif" />
</span>
<img src="black.gif" />
</td>
</tr>
</table>
';
/////////////////////////////////////////////////////////////////////
$dom = new DOMDocument();
$dom->loadHTML($html);
$xpath = new DomXPath($dom);
/////////////////////////////////////////////////////////////////////
$query = $xpath->query('.//table/tr/td');
for( $x=0,$results=''; $x<$query->length; $x++ )
{
$x1=$x+1;
$image = $query->item($x)->getELementsByTagName('img')->item(0)->getAttribute('src');
$results .= "image $x1 is : $image<br/>";
}
echo $results;
/////////////////////////////////////////////////////////////////////
?>
我可以通过 $query->item()->
来完成吗 我尝试了 has_attributes
和 getElementsByTagNameNS
和 getElementById
但我失败了::
i need to get only image that in current node and not in child nodes
i want to get only green/yellow/red/black
images without not_important.gif
image
i can use query './/table/tr/td/img'
but i need it inside loop
<?php
/////////////////////////////////////////////////////////////////////
$html='
<table>
<tr>
<td colspan="2">
<span>
<img src="not_important.gif" />
</span>
<img src="green.gif" />
</td>
</tr>
<tr>
<td>
<span>yellow</span>
<img src="yellow.gif" />
</td>
<td>
<span>red</span>
<img src="red.gif" />
</td>
</tr>
</table>
<table>
<tr>
<td>
<span>
<img src="not_important.gif" />
</span>
<img src="black.gif" />
</td>
</tr>
</table>
';
/////////////////////////////////////////////////////////////////////
$dom = new DOMDocument();
$dom->loadHTML($html);
$xpath = new DomXPath($dom);
/////////////////////////////////////////////////////////////////////
$query = $xpath->query('.//table/tr/td');
for( $x=0,$results=''; $x<$query->length; $x++ )
{
$x1=$x+1;
$image = $query->item($x)->getELementsByTagName('img')->item(0)->getAttribute('src');
$results .= "image $x1 is : $image<br/>";
}
echo $results;
/////////////////////////////////////////////////////////////////////
?>
can i do it through $query->item()->
i tried has_attributes
and getElementsByTagNameNS
and getElementById
but i failed ::
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
替换:
...为:
换句话说,再次使用
XPath
对象进行查询,但现在对于./img
,相对于您作为第二个提供的上下文节点query()
的参数。上下文节点是先前结果的元素 (td
) 之一。Replace:
...with:
In other words, use the
XPath
object again to query, but now for./img
, relative to the context node you provide as the second argument toquery()
. The context node being one of the elements (td
) of the earlier result.查询
//table/tr/td/img
应该可以正常工作,因为不需要的图像都驻留在元素中。
你的循环看起来像
The query
//table/tr/td/img
should work just fine as the unwanted images all reside in<span>
elements.Your loop would look like