PHP简单HTML DOM解析器

PHP简单HTML DOM解析器,php,html,dom,Php,Html,Dom,我刚开始使用 现在,我试图从现有HTML文档中提取包含-标记的所有元素。这对我来说很好 foreach($html->find('b') as $q) echo $q; 我如何才能实现只显示被包围的元素,-标记后跟 更新: 我已经使用firebug来获取元素的css路径。现在看起来是这样的: foreach ($html->find('html body div#wrapper table.desc tbody tr td div span.marked') as $x)

我刚开始使用

现在,我试图从现有HTML文档中提取包含
-标记的所有元素。这对我来说很好

foreach($html->find('b') as $q)
    echo $q;
我如何才能实现只显示被
包围的元素,
-标记后跟

更新: 我已经使用firebug来获取元素的css路径。现在看起来是这样的:

foreach ($html->find('html body div#wrapper table.desc tbody tr td div span.marked') as $x)
    foreach ($x->find('html body div#wrapper table.desc tbody tr td table.split tbody tr td b') as $d)
        echo $d;
但它不会起作用。。。有什么想法吗

更新:

为了澄清我的问题,这里有一个带有起始表和结束表标签的文档示例tr

<table width="100%" border="0" cellspacing="0" cellpadding="0" class="desc">
    <tr>
        <th width="25%" scope="col"><div align="center">1</div></th>
        <th width="50" scope="col"><div align="center">2</div></th>
        <th width="10%" scope="col"><div align="center">3</div></th>
        <th width="15%" scope="col"><div align="center">4</div></th>
    </tr>
    <tr>
        <td valign="top" bgcolor="#E9E9E9"><div style="text-align: center; font-weight: bold; margin-top: 2px"> 1 </div></td>
        <td>
            <table width="100%" border="0" cellspacing="0" cellpadding="0" class="split">  <tr>
                    <td>
                        <b> element to extract</b></td>
                </tr>
                <tr>
                    <td>
                        <table width="100%" border="0" cellspacing="0" cellpadding="0" class="split">  <tr>
                                <td width="15px" valign="top">&nbsp;</td>
                                <td width="15px" valign="top">  
                                    <div style="background-color:green ;color:#FFFFFF; text-align:center;padding-bottom: 1px">
                                        1
                                    </div>
                                </td>
                                <td>
                                    abed
                                </td>
                            </tr>
                            <tr>
                                <td width="15px" valign="top">&nbsp;</td>
                                <td width="15px" valign="top">  
                                    <div style="background-color:green ;color:#FFFFFF; text-align:center;padding-bottom: 1px">
                                        2
                                    </div>
                                </td>
                                <td>
                                    ddee
                                </td>
                            </tr>
                            <tr>
                                <td width="15px" valign="top">&nbsp;</td>
                                <td width="15px" valign="top">  
                                    <div style="background-color:green ;color:#FFFFFF; text-align:center;padding-bottom: 1px">
                                        3
                                    </div>
                                </td>
                                <td>
                                    xdef
                                </td>
                            </tr>
                            <tr>
                                <td width="15px" valign="top">&nbsp;</td>
                                <td width="15px" valign="top">
                                    <div style="background-color:green ;color:#FFFFFF; text-align:center;padding-bottom: 1px">
                                        4
                                    </div>
                                </td>
                                <td>
                                    abbcc
                                </td>
                            </tr>
                            <tr>
                                <td width="15px" valign="top">&nbsp;</td>
                                <td width="15px" valign="top">  
                                    <div style="background-color:green ;color:#FFFFFF; text-align:center;padding-bottom: 1px">
                                        5
                                    </div>
                                </td>
                                <td>
                                    ab
                                </td>
                            </tr>
                            <tr>
                                <td width="15px" valign="top">&nbsp;</td>
                                <td width="15px" valign="top">  
                                    <div style="background-color:green ;color:#FFFFFF; text-align:center;padding-bottom: 1px">
                                        6
                                    </div>
                                </td>
                                <td>
                                    e1
                                </td>
                            </tr>
                        </table>
                    </td>
                </tr>
            </table>
        </td>
        <td valign="top"><div style="text-align: center"> <span class="marked">marked</span> </div></td>
        <td valign="top"><div style="text-align: center">  </div></td>
    </tr>
</table>

1.
2.
3.
4.
1.
要提取的元素
1.
阿贝德
2.
ddee
3.
xdef
4.
abbcc
5.
ab
6.
e1
标记
尝试以下操作

但这将返回span,因此您可能必须执行
$e->parent()
才能访问b元素

有关SimpleHtmlDom的替代方案,请参见


更新后编辑:

,您将看到没有tbody元素。然而萤火虫给了你

html body div#wrapper table.desc tbody tr td div span.marked'
html body div#wrapper table.desc tbody tr td table.split tbody tr td b'
此外,您的问题与查询不匹配。你问如何找到

元素周围有
-标记,后跟

这可以理解为两种意思

<b><span class="marked">foo</span></b>
获取范围,然后使用
$e->prev_sibling()
返回元素的上一个同级(如果未找到,则返回null)

但是,在显示的标记中,既没有也没有。只有一个具有SPAN子级的DIV具有标记的类

<div style="text-align: center"> <span class="marked">marked</span>
已标记

如果这是你想要匹配的,那又是子组合符。当然,您必须先将b改为div。

更简单的是手动:

foreach($html->find('b') as $q)
    echo $q->plaintext;

@然而,我不知道SimpleHtmlDom实现它们的级别。还有,我不明白当我可以使用DOM和XPath时为什么需要它们(或SimpleHtmlDom):)FTR,SimpleHtmlDom不支持同级选择器,但你是说
还是
b + span.marked
<div style="text-align: center"> <span class="marked">marked</span>
foreach($html->find('b') as $q)
    echo $q->plaintext;