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

问题描述 投票:2回答:5

我想说,我知道,很多人认为,简单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]等吗?

php parsing simple-html-dom
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
    }
}

1
投票

据我所知,目前尚无办法。应该由该脚本的作者或愿意继续开发该项目的其他开发人员进行编辑。不知道许可证是否允许。


0
投票

以前从未使用过简单HTML DOM解析器。但其首页说它可以jQuery方式工作,因此请尝试tag[attr1=value][attr2=value]jQuery: Multiple Attribute Selector


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返回一个节点数组,而不是一个新的树对象,从而无法链接。

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


0
投票

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

© www.soinside.com 2019 - 2024. All rights reserved.