首页 > 解决方案 > 使用 contains 返回太多结果

问题描述

在下面的 html 中,我试图获取包含 值的两个节点shipment_number,但我得到了 6<td>个节点 - 为什么?不contains将节点限制为仅与文本值匹配的节点吗?如果是这样,下面的语句应该只返回两个,而不是六个?

在 Chrome 开发控制台中:

$x("//tr//td[contains(.,'shipment number')]/following::td[1]")

在此处输入图像描述

html:

<!DOCTYPE html>
<html lang="en" xmlns="http://www.w3.org/1999/xhtml">
<head>
    <meta charset="utf-8" />
    <title></title>
</head>
<body>
    <table border="1">
        <tbody>
            <tr>
                <td>
                    <table>
                        <tbody>
                            <tr>
                                <td>
                                    <table>
                                        <tbody>
                                            <tr>
                                                <td>Date</td>
                                                <td>11/15/2019</td>
                                            </tr>
                                            <tr>
                                                <td>shipment number</td>
                                                <td>abc_123_florida-45</td>
                                            </tr>
                                            <tr>
                                                <td>Departure time:</td>
                                                <td>0430</td>
                                            </tr>
                                        </tbody>
                                    </table>
                                </td>
                                <td>
                                    <table>
                                        <tbody>
                                            <tr>
                                                <td>Time arrival</td>
                                                <td>1715</td>
                                            </tr>
                                            <tr>
                                                <td>customer</td>
                                                <td>bob smith</td>
                                            </tr>
                                            <tr>
                                                <td>box type</td>
                                                <td>square</td>
                                            </tr>
                                        </tbody>
                                    </table>
                                </td>
                            </tr>
                        </tbody>
                    </table>
                </td>
            </tr>

        </tbody>
    </table>
    <table border="1">
        <tbody>
            <tr>
                <td>
                    <table>
                        <tbody>
                            <tr name="laneStop">
                                <td>box1</td>
                                <td>23.45</td>
                                <td>lane1</td>
                                <td>south</td>
                            </tr>
                            <tr name="laneStop">
                                <td>box2</td>
                                <td>17.14</td>
                                <td>lane1</td>
                                <td>south</td>
                            </tr>
                            <tr name="laneStop">
                                <td>box3</td>
                                <td>17.18</td>
                                <td>lane1</td>
                                <td>north</td>
                            </tr>
                            <tr name="laneStop">
                                <td>box2</td>
                                <td>199.14</td>
                                <td>lane1</td>
                                <td>west</td>
                            </tr>
                        </tbody>
                    </table>
                </td>
            </tr>
        </tbody>
    </table>

    <table border="1">
        <tbody>
            <tr>
                <td>
                    <table>
                        <tbody>
                            <tr>
                                <td>
                                    <table>
                                        <tbody>
                                            <tr>
                                                <td>Date</td>
                                                <td>11/16/2019</td>
                                            </tr>
                                            <tr>
                                                <td>shipment number</td>
                                                <td>abc_222_florida-35</td>
                                            </tr>
                                            <tr>
                                                <td>Departure time:</td>
                                                <td>0630</td>
                                            </tr>
                                        </tbody>
                                    </table>
                                </td>
                                <td>
                                    <table>
                                        <tbody>
                                            <tr>
                                                <td>Time arrival</td>
                                                <td>1715</td>
                                            </tr>
                                            <tr>
                                                <td>customer</td>
                                                <td>sue smith</td>
                                            </tr>
                                            <tr>
                                                <td>box type</td>
                                                <td>rect</td>
                                            </tr>
                                        </tbody>
                                    </table>
                                </td>
                            </tr>
                        </tbody>
                    </table>
                </td>
            </tr>

        </tbody>
    </table>
    <table border="1">
        <tbody>
            <tr>
                <td>
                    <table>
                        <tbody>
                            <tr name="laneStop">
                                <td>box1</td>
                                <td>33.45</td>
                                <td>lane1</td>
                                <td>south</td>
                            </tr>
                            <tr name="laneStop">
                                <td>box2</td>
                                <td>1.14</td>
                                <td>lane1</td>
                                <td>south</td>
                            </tr>
                            <tr name="laneStop">
                                <td>box3</td>
                                <td>27.18</td>
                                <td>lane1</td>
                                <td>north</td>
                            </tr>
                            <tr name="laneStop">
                                <td>box2</td>
                                <td>299.14</td>
                                <td>lane1</td>
                                <td>west</td>
                            </tr>
                        </tbody>
                    </table>
                </td>
            </tr>
        </tbody>
    </table>
</body>
</html>

标签: xpath

解决方案


你需要

//tr//td[contains(text(),'shipment number')]/following::td[1] 

那是因为通过扩展其所有文本后代而不仅仅是子级来contains(., '...')转换为字符串。.


推荐阅读