Выражение XPath для выбора себя, предшествующих и следующих узлов - PullRequest
3 голосов
/ 11 августа 2011

Я бы хотел выбрать следующий HTML-код в документе, основываясь на содержании TARGET. То есть если TARGET совпадает, выберите все. Однако я не уверен, куда идти после: id('page')/x:div/span/a='TARGET' - Как использовать выражения родителя, ребенка и родного брата, чтобы получить содержащий div, a, предшествующий этому div, и два br теги, следующие за div

<a></a>
<div>
    <br />
    <span>
        <a>TARGET</a>
        <a></a>
        <span>
            <span>
                <a></a>
            </span>
            <a></a>
            <span></span>
        </span>
        <span>
            <a></a>
        </span>
    </span>
</div>
<br />
<br />

Ответы [ 2 ]

3 голосов
/ 11 августа 2011

Используйте один XPath, например:

"//*[
     (self::a and following-sibling::*[1][self::div and span/a='TRAGET']) or
     (self::div and span/a='TARGET') or
     (self::br and preceding-sibling::*[1][self::div and span/a='TARGET']) or
     (self::br and preceding-sibling::*[2][self::div and span/a='TARGET'])
    ]"

Обратите внимание, что ваш документ плохо сформирован из-за незакрытых тегов br .Более того, я не включил никакого пространства имен, которое вы можете добавить в случае необходимости.

1 голос
/ 11 августа 2011

Вероятно, вы должны сначала найти все div'ы (не уверены, что условия должны быть выполнены):

//div[span[a[text()="TARGET"]]][preceding-sibling::*[1][name()="a"]][following-sibling::*[1][name()="br"]]

после этого - все связанные элементы для каждого div:

   ./preceding-sibling::a[1]
   ./following-sibling::br[1]
   ./following-sibling::br[2]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...