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

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

1
2
3
4
5
6
7
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] 等?


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

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

1
2
3
foreach ( $dom -> find ( ‘tag[attr1][attr2]’ ) as $stuff ) {
    echo $stuff ;
}

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


1
2
3
4
5
6
7
8
9
10
11
12
$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
    }
}



相关讨论

  • 是的,这是 DOMDOcument 功能的一个很好的例子,但正如主题所说,我需要特别简单的 HTML DOM 解析器。如果不可能 100%,那么我需要有人用 100% 的知识说它是这样的。
  • 您无法 100% 解析它。这取决于 HTML 类型,我的意思是它显示 HTML 到 HTML 的差异。另外我在示例中犯了一个错误,请参阅检查此 $xpath->query( “//*/div[@class=\\’name\\’][@id=\\’someId\\’][class=\\’SomeClassName\\ ‘]??”
  • 你仍然在谈论 DOMDocument。这个问题显然是关于 Simple HTML DOM parser -> simplehtmldom.sourceforge.net


据我所知,查看了 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 返回一个节点数组而不是一个新的树对象,这使得链接变得不可能。

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


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



相关讨论

  • 试过这个。不。如果我做的一切都正确,那么它就行不通了。


声明:本站(华域联盟www.cnhackhy.com)所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。