使用简单的html dom解析器通过每个元素的两个或更多属性查找部分

时间:2011-04-09 10:17:23

标签: php parsing simple-html-dom

我想说,我知道,很多人认为,简单的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]等类似方式或相似内容?

5 个答案:

答案 0 :(得分: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
    }
}

答案 1 :(得分:1)

我认为目前无法做到这一点。它应由此脚本的作者或愿意继续开发此项目的其他开发人员编辑。不知道许可证是否允许。

答案 2 :(得分:0)

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

答案 3 :(得分: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]"),但这也失败了,因为简单的HTML DOM返回一个节点数组而不是一个新的树对象,使链接变得不可能。

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

答案 4 :(得分:0)

大概8年后,他们提出了一个更新版本。

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

foreach($dom->find('tag[attr1][attr2]') as $stuff){
    echo $stuff;
}

希望有帮助。