Выбор элемента на основе текста и атрибута его родного брата с помощью Xpath - PullRequest
0 голосов
/ 21 марта 2010

Глядя на документ, цель состоит в том, чтобы выбрать вторая ячейка второго ряда в первой таблице.

Я создал следующее выражение:

//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 Ответ

4 голосов
/ 21 марта 2010

На первый взгляд, я думаю, что вы хотите написать:

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

Странно то, что я не вижу узлов в ваших выборочных данных, которые соответствуют всем трем условиям.

РЕДАКТИРОВАТЬ : На основе обратной связи, вот еще один запрос, чтобы попробовать.

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