3

我想说,我知道,很多人认为,简单的 HTML DOM 解析器对于 HTML 解析器来说是一个非常糟糕的选择。我现在仍然需要使用它。

我阅读了一些文章,其中描述了如何通过每个元素的两个或多个属性进行搜索。他们提出了类似的东西和阵列过滤的一种可能性

foreach ( tag[attr1=value] as tag1 )
{
   foreach ( tag[attr2=value] as tag2 )
   {
      // print tag2[attr1=value,attr2=value]
   }
}

我的问题是关于通过两个属性查找部分的原生可能性。我没有在手册中找到它,但并非所有内容都始终在手册中。

有谁知道有这样的方式或类似的方式tag2[attr1=value,attr2=value]tag2[attr1=value attr2=value]

4

5 回答 5

1
$doc      = new DOMDocument();
@$doc->loadHTML( $html );
$xpath    = new DOMXpath( $doc );
$elements = $xpath->query( "//*/div[@class='name'][@id='someId']" );  

if ( $elements->length > 0 )
{
    foreach ( $elements as $index => $node )
    {
        //get node detail here
    }
}
于 2011-04-29T21:57:46.383 回答
1

正如我所看到的,目前没有办法做到这一点。它应该由该脚本的作者或其他愿意继续开发该项目的开发人员进行编辑。不知道许可证是否允许。

于 2011-05-03T10:23:01.073 回答
1

大概八年后,他们想出了一个更新的版本。

要使用具有多个属性的简单 HTML DOM 解析器,

foreach($dom->find('tag[attr1][attr2]') as $stuff){
    echo $stuff;
}
于 2019-11-13T01:22:42.000 回答
0

据我所知,查看了 simple_html_dom,除了嵌套的 foreach 循环之外,没有其他方法可以实现您正在寻找的功能。没有内置支持tag[attr=val][attr2=val]

此外,每个选择器的作用只是添加到返回的节点,而不是从它拿走,所以tag.class[attr=val] or tag#id[attr=val]我尝试过类似的工作,它会模仿一些类似的功能。

同样,我尝试过$html->find("div[attr=val]")->find("div[attr2=val2]"),但这也失败了,因为 Simple HTML DOM 返回一个节点数组而不是一个新的树对象,这使得链接变得不可能。

最好的方法是您在问题中发布的方式。

于 2011-05-05T07:22:04.403 回答
0

以前从未使用过简单的 HTML DOM 解析器。但它的主页说它以 jQuery 方式工作,所以试试tag[attr1=value][attr2=value]jQuery: Multiple Attribute Selector

于 2011-04-09T10:50:40.293 回答