使用Xpath选择基于其兄弟的文本和属性的元素

时间:2010-03-21 18:10:00

标签: c# xpath html-agility-pack

查看文档,目标是选择 第二行中的第二个单元格,在第一个表格中。

我创建了以下表达式:

//row/td[2]/text()[td[@class="identifier"]/span[text()="identifier"]]

但它不会返回任何行。不幸的是,我没有看到什么是错的。

对我来说,它看起来还不错。表达式应该:

select the text
    in the second cell 
        in any row
where
    the text of a span equals to "identifier"
        and the span is located in cell with a "identifier" class

如果你能指出我做错了什么,我会很感激。

示例XML文档:

<?xml version="1.0"?>
<html>
    <table class="first">
        <tr>
            <td>row 1, cell 1</td>
            <td>row 1, cell 2</td>
        </tr>
        <tr>
            <td class="identifier">
                <span>identifier</span>
            </td>
            <td>
                foo
                <span>ignore</span>
                bar
            </td>
        </tr>
        <tr>
            <td>row 3, cell 1</td>
            <td>row 3, cell 2</td>
        </tr>
    </table>

    <table class="second">
        <tr>
            <td>row 1, cell 1</td>
            <td>row 1, cell 2</td>
        </tr>
        <tr>
            <td class="identifier">
                <span>not an identifier</span>
            </td>
            <td>
                not a target
            </td>
        </tr>
        <tr>
            <td>row 3, cell 1</td>
            <td>row 3, cell 2</td>
        </tr>
    </table>
</html>

1 个答案:

答案 0 :(得分:4)

乍一看,我认为你的意思是写:

//tr/td[2][@class="identifier"][span="identifier"]

奇怪的是,我没有在样本数据中看到任何符合所有三个条件的节点。

编辑:根据反馈,这是另一个要尝试的查询。

//tr[td/@class="identifier"][td/span="identifier"]/td[2]/text()