С помощью Jsoup выберите элемент, следующий за текстом

HTML-страница является чем-то следующим:

bananas
<myTag ...> ... </myTag>

myTagТег не имеет idили name. Как я могу выбрать его, учитывая только информацию, которая приходит после текста bananas?

Конечно, вы можете выбрать тег, подсчитав порядок размещения всех myTagэлементов, но я прошу самый чистый способ в случае no idили nameили любого другого атрибута.

1 ответ

  1. Вот некоторые варианты, которые я могу видеть:

    Вариант 1: использовать запрос CSS

    Модуль CSS Jsoup не разрешает выбор текстового узла. Однако вы можете использовать эту опцию тогда и только тогда myTag, когда и bananasимеют один и тот же родительский элемент.

    :containsOwn(bananas) > myTag
    

    ДЕМОНСТРАЦИЯ

    ОПИСАНИЕ:

    :containsOwn(bananas) /* Select any element (1) having a TextNode as direct 
                             child containing bananas */
    > myTag               /* Select child elements of (1) with tag name myTag */
    

    Вариант 2: посетить все узлы

    Этот параметр включает в себя больше написания кода. Вы можете действовать в три этапа:

    1. Посетите вручную каждый узел в документе (см. NodeVisitor ).
    2. Если a TextNodeнайден и содержит bananas
      Затем перейдите к 3.
      Еще посетите следующий узел.
    3. Если TextNodeимеет одноуровневый узел с именем myTag
      Затем был найден узел myTag; посетите следующий узел
      Еще посетите следующий узел.