Фильтрация определенных тегов в отличном XMLslurper - PullRequest
0 голосов
/ 24 сентября 2018

У меня есть xml-документ, который я хочу проанализировать с помощью XMLslurper.Это на самом деле работает довольно хорошо, но у меня есть проблемы при чтении некоторых тегов, потому что может быть несколько строк в одном узле, например:

<element name="ABC">
    <description>lorem ipsum</description>
    <description>foo</description>
    <description type="DETAILED">some text</description>
</element>

Если я использую element.description.text() сейчас, я получаю lorem ipsumfoosome text как вывод.Как мне его кодировать, чтобы:

  1. Читался только первый тег description
  2. Читался только (первый) тег description type="DETAILED"
  3. Все теги читаются, но по крайней мере разделяются пробелами

1 Ответ

0 голосов
/ 24 сентября 2018

Когда вы анализируете XML-документ с помощью XmlSlurper, вы получаете доступ к тегу element как NodeChildren, который реализует интерфейс Iterable.Вот почему вы можете применять следующие операции:

  1. Чтобы получить первый тег описания (Iterable.first()):

    element.description.first()?.text()
    
  2. Чтобы получить первый тег описания с типом DETAILED (Collection.find(Closure cl)):

    element.description.find { it.@type == 'DETAILED' }?.text()
    
  3. Чтобы получить все описания, разделенные пробелом (Iterable.join(String separator)):

    element.description.join(' ')
    

Полный пример:

def xml = '''
<element name="ABC">
    <description>lorem ipsum</description>
    <description>foo</description>
    <description type="DETAILED">some text</description>
</element>
'''

def element = new XmlSlurper().parseText(xml)

println element.description.first()?.text()
println element.description.find { it.@type == 'DETAILED' }?.text()
println element.description.join(' ')

Выход:

lorem ipsum
some text
lorem ipsum foo some text
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...