2014-11-17 3 views
1

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

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

В заводной я пытаюсь этот код:

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

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

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

+0

Для меня это немного неясно. Предоставьте SSCCE. – Opal

+0

Сдвиг по этому вопросу, вероятно, от тех, кто не понимал grooy (или они говорят java-скрипт). +1 для ваших исследований и ясности. – Jayan

+0

Спасибо за понимание «Jayan», я не знаю, как я мог бы объяснить свой вопрос проще ... – Bazyl

ответ

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) 
+0

Спасибо. Метод localText() был именно тем, что я искал. Вопрос в том, почему я не мог найти его в документации [здесь] (http://groovy.codehaus.org/api/groovy/util/slurpersupport/GPathResult.html)? – Bazyl

+1

В любом случае я уже меняю библиотеку для разбора html. Я использовал JSoup и сделал это через 5 минут ... поэтому я рекомендую его для всех, кто беспокоит модификацию html в groovy. – Bazyl

+0

Отлично. Если кто-то просит простой html-манипуляции, первая рекомендация всегда jsoup. Думаю, мое редактирование ухудшило его. Я удалил этот тег, считая это простым текстовым редактором. – Jayan