首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >用PHP简单的Html Dom获取不同类型的前一个元素?

用PHP简单的Html Dom获取不同类型的前一个元素?
EN

Stack Overflow用户
提问于 2012-03-12 05:40:59
回答 2查看 1K关注 0票数 1

希望通过简单的Html Dom可以做到这一点,我正在抓取一个如下所示的页面:

代码语言:javascript
运行
复制
<h5>this is title 1</h5>
<img>
<img>
<img>

<h5>this is title 2</h5>
<img>
<img>

<h5>this is title 3</h5>
<img>
<img>
<img>
<img>

等等。

我试着让它看起来像这样:

代码语言:javascript
运行
复制
<h5>this is title 1</h5>
<img>
<h5>this is title 1</h5>
<img>
<h5>this is title 1</h5>
<img>


<h5>this is title 2</h5>
<img>
<h5>this is title 2</h5>
<img>

这意味着对于每个IMG,我想我需要找到并抓取第一个先前的H5。没有父div或任何结构来使它变得更容易,这几乎就是我所描述的。

我使用的代码看起来像这样(简化):

代码语言:javascript
运行
复制
foreach($html->find('img') as $image){

//do stuff to the img

$title = $html->find('h5')->prev_sibling();


echo $title; echo $image;}

我用prev_sibling尝试过的每一件事都得到了一个“致命错误:在非对象上调用成员函数prev_sibling()”,我想知道用PHP Simple HTML Dom能不能实现我想要做的事情。我希望如此,我试过的所有其他刮板都让我抓狂。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-03-12 05:58:27

实际上,您希望选择所有的h5元素,以及所有的img元素。然后,遍历它们,并检查它们的类型。如果是h5元素,则更新$title变量,但不echo任何内容。如果是img,只需在图像之前回显$title即可。现在不需要去寻找h5了,因为你已经缓存了它。

下面是一个例子:

代码语言:javascript
运行
复制
foreach ( $html->find('h5, img') as $el )
{
    if ( $el->tag == 'h5' )
    {
        $title = $el->plaintext;
        continue;
    }

    echo "<h5>$title</h5>";
    echo $el->outertext;
}
票数 1
EN

Stack Overflow用户

发布于 2012-03-12 05:55:22

是的,因为您没有将整个页面作为dom加载,所以您实际上拥有的是一个DOMElement列表,而前一个子项将为空。

而不是以前的查找,你可以做的是,有一个移动的指针

代码语言:javascript
运行
复制
$all = get all elements,
$title = null;
foreach ($all as $e) {
  if ($e == "h5") {
    $title = $e;
    continue;
  }
  echo $title . $e;
}

有一些sedo代码,但你会明白我的意思。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9659149

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档