使用xpath - 如何选择与表头相关的列数据

时间:2017-06-02 11:15:10

标签: html xml xpath

<table border="1">
    <tbody>
        <tr>
            <th>ID</th>
            <th>Product</th>
            <th>Color</th>
            <th>Model</th>
        </tr>
        <tr>
            <td>22</td>
            <td>Car</td>
            <td>blue</td>
            <td>
                <ul>
                </ul>
            </td>
        </tr>
    </tbody>
</table>

上面是一个高度嵌套的html文档的片段。为了获得表级别,我使用了以下xpath

//th[contains(text(), "ref_code")]/following-
sibling::td[contains(text(), "197")]/ancestor::table[2]

然后如何编辑相同的xpath并使用xpath选择特定的表头数据和相应的表数据列:

ID |产品|颜色

22 |车|蓝色

任何帮助将不胜感激

2 个答案:

答案 0 :(得分:2)

从您的评论到这里给出的答案: 我假设您从现有的xpath获取上表:

//th[contains(text(), "ref_code")]/following-
sibling::td[contains(text(), "197")]/ancestor::table[2]

现在您要添加/编辑此xpath,以便在给定列的情况下获取td的值。 Color,然后下面的xpath应该为给定td的所有列提供Color值作为输入:

//td[position()<=(count(//tr/th[.='Color']/preceding-sibling::*)+1) ]

假设您的第一个xpath正常工作,请将上面的xpath添加到:

//th[contains(text(), "ref_code")]/following-
sibling::td[contains(text(), "197")]/ancestor::table[2]//td[position()<=(count(//tr/th[.='Color']/preceding-sibling::*)+1) ]

输出:

<td>22</td>
<td>Car</td>
<td>blue</td>

如果您只想要Color,请使用xpath:

//td[(count(//tr/th[.='Color']/preceding-sibling::*)+1) ]

如果您只想使用Product使用xpath:

//td[(count(//tr/th[.='Product']/preceding-sibling::*)+1) ]

如果您只想使用ID使用xpath:

//td[(count(//tr/th[.='ID']/preceding-sibling::*)+1) ]

请注意,xpath在th[.='XXX']处更改,其中XXX是所选元素。

如果您希望输出采用表格形式,则需要使用XSLT,因为您正在尝试获取HTML的转换视图,而不仅仅是选定的元素。

答案 1 :(得分:0)

我们按列//table//td

的标题中的位置搜索表格数据//table//th[text()='Color']

[count(element/preceding-sibling::*) +1]是如何查找元素的索引

结果是:

//table//td[count(//table//th[text()='Color']/preceding-sibling::*) +1]