Как получить текст HTML-тега с помощью XMLSlurper в Groovy

Я пытаюсь изменить HTML-код в Groovy. Я разобрал его с помощью XMLSlurper. Проблема в том, что мне нужно отредактировать текст определенного тега, который содержит текстовые и дочерние теги. Html-код выглядит так:

<ul><li>Text to modify<span>more text</span></li></ul>

В Groovy я пробую этот код:

def ulDOM = new XmlSlurper().parseText(ul);
def elements = ulDOM.li.findAll{
    it.text().equals("text i am looking for");
}

Проблема в том, что у меня есть пустой массив в 'elements', потому что it.text () возвращает текст из 'it' узла вместе со всеми текстовыми узлами поддерева DOM. В данном случае «Текст для изменения большего количества текста». Обратите внимание, что для моего решения недостаточно метода contains ().

Мой вопрос в том, как получить точный текст из определенного тега, а не текст из всего поддерева DOM?


person Bazyl    schedule 17.11.2014    source источник
comment
Для меня это немного непонятно. Предоставьте SSCCE.   -  person Opal    schedule 17.11.2014
comment
Спасибо за понимание "Джаян", я не знаю, как я могу объяснить свой вопрос проще ...   -  person Bazyl    schedule 20.11.2014


Ответы (1)


.text () оценивает дочерние элементы и добавляет. Следовательно, он всегда будет включать объединенную строку.

Не могли бы вы использовать localText ()? Не совсем то, что вы ожидаете, он возвращает массив строк.

import org.testng.Assert

ul='''<ul>
          <li>Text to modify<span>more text</span>
          </li>
       </ul> '''

def ulDOM = new XmlSlurper().parseText(ul);


def elements = ulDOM.li.findAll{
    String[] text = it.localText();
    text[0].equals("Text to modify");
}
Assert.assertTrue(elements.size()==1)
person Jayan    schedule 19.11.2014
comment
Спасибо. Метод localText () был именно тем, что я искал. Вопрос в том, почему я не смог найти его в документации здесь? - person Bazyl; 20.11.2014
comment
В любом случае я уже меняю библиотеку для разбора html. Я использовал JSoup и сделал это за 5 минут ... поэтому я рекомендую его всем, кто беспокоит модификацию html в Groovy. - person Bazyl; 20.11.2014
comment
Здорово. Если кто-то просит простую манипуляцию с HTML, первой рекомендацией всегда будет jsoup. Думаю, моя правка только усугубила ситуацию. Я удалил этот тег, посчитав это простым редактированием XML. - person Jayan; 20.11.2014