比没有唯一标识符的DOM更好的方式?

时间:2013-01-23 01:26:54

标签: php html simple-html-dom

我仍在忙着学习php简单的DOM并遇到了一个令人费解的场景。没有唯一标记可用于指定我想要的内容,它只有大量的<a>标记。除了它们在评论之间分组的事实。

如果我做了

foreach($html->find('comment a') as $a){
    $articles[] = array($a->href,$a->innertext);
}

我得到了很多东西。那么有没有办法指定我想要第一个和第二个注释之间的所有<a>标签,第三个和第四个等等。或者DOM是不是最好的东西,在那里只是一个混乱的情况下使用的HTML。

段:

<! FIRST COLUMN STARTS HERE>
<center><table CELLPADDING="3" WIDTH="100%"><tr>
<td ALIGN="LEFT" VALIGN="TOP" WIDTH="30%"><tt><b>
<A HREF="http://foo.bar">Text text text...</A><BR><BR>

由于

1 个答案:

答案 0 :(得分:0)

这是可能的,但考虑标签的顺序而不是它们的嵌套可能更好。

$articles = array(array());
foreach($html->find('comment, a') as $a) {
    if ($a->nodetype == HDOM_TYPE_COMMENT) {
        $articles[] = array();
    } else {
        $articles[count($articles) - 1][] = array($a->href,$a->innertext);
    }
}

这个(相当粗略的)代码将创建一个数组数组,一个用于第一个注释之前的任何<a>,一个用于每个注释,每个数组包含零个或多个文章,具体取决于它之间出现的链接数量评论和下一个。

顺便说一句,此代码不适用于您提供的代码段,因为其中的注释以<!开头,以>结尾,而不是<!--和{{1 }}, 分别。我假设评论在实际的HTML标记中正确显示。

编辑:好的,发现了“评论”,因为它们在代码段中。在这种情况下,似乎simplehtml调用以-->开头的所有其他标记:“unknown”。因此,如果您将其添加到上面的代码中,您就拥有了链接数组:

<!