1

我使用简单的 HTML DOM 已经有一段时间了,并且一直喜欢我可以用它做的事情。但是,我遇到了我想做的事情。首先给出 html 长什么样的基本概念

<html>
<div><div><table><tr><td class="alt2"> texty texty </td></tr></table></div></div>
Text text
<div><div><table><tr><td class="alt2"> texty2 texty2 </td></tr></table></div></div>
Text2 text2
<div><div><table><tr><td class="alt2"> texty3 texty3 </td></tr></table></div></div>
Text2 text3
</html>

所以基本上我需要在 TD 的粗体中取什么,然后在这个 div 下的每个 div 下放置什么。

所以我知道我可以做 $text = $html->find('td[class=alt2]') 例如得到“texty texty”,但是之后我如何将“text text”与它相关联,

如果我抓住 texty2 texty2,我如何将 text2 text 2 与它相关联?


最后,我的目标是<p>texty texty</p><br>text text 输出

我应该指出,div 可以有不同的类等,所以简单的 reg 表达式不起作用(如果可能的话,我想坚持使用简单的 html dom)

--

更新:

我做了这个小代码

if ($html) {


// Pulls the div that holds the links to the champion profiles (where they have the english names)
$text = $html->find('td[class="alt2"]');
$count = 0;
foreach ($text as $holder) {

    $tdholder[] = $holder->innertext;
    $html->find('div',$count*2)->innertext = $holder->innertext;
    echo $holder."<br><br>";
    $count++;
}
}

此代码的唯一问题是它按 div 的总数计算。在我的例子中这没关系,因为总是有 2 个。但如果有 2 个或三个,这就会产生问题。所以现在我只需要弄清楚如何抓住第一个,第二个或第三个顶级div,我应该很好。

4

1 回答 1

0

Text text,Text2 text2 并且Text2 text3不在任何使您的请求模棱两可的 html 标记中

下面的解决方案可以工作but it is code specific,它只适用于上面的 HTML 示例添加您的原始 HTML 以便更好地实施

$list = array();
foreach ( $html->find('text') as $td ) {
    $list[] = $td->plaintext;
}

echo "<pre>";   
foreach (array_chunk(array_filter(array_map("trim", $list)), 2) as $info ) {
    vprintf("TD: %s,\tTXT: %s \n", $info);
}

输出

TD: texty texty,    TXT: Text text 
TD: texty2 texty2,  TXT: Text2 text2 
TD: texty3 texty3,  TXT: Text2 text3 
于 2012-11-07T23:40:59.430 回答