Groovy XML SLurper не может получить доступ к дочернему узлу - PullRequest
0 голосов
/ 13 июня 2019

Я недавно начал использовать XML Slurper и пытаюсь получить доступ к определенному дочернему узлу из конверта SOAP. Ниже приведен фрагмент XML, с которым я работаю:

<cons:ConsumerName>
 <cons:FirstName>Robert</cons:FirstName>
 <cons:MiddleName>John</cons:MiddleName>
 <cons:FamilyName>Smith</cons:FamilyName>
</cons:ConsumerName>

<cons:ContactPersonName>
 <cons:FirstName>William</cons:FirstName>
 <cons:MiddleName>Michael</cons:MiddleName>
 <cons:FamilyName>Doe</cons:FamilyName>
</cons:ContactPersonName>

Я пытаюсь получить доступ к значению FirstName в блоке ConusmerName. Мне удалось получить список обоих значений имени только с помощью:

def block = new XmlSlurper().parseText(text).'**'.findAll{it.name()=='FirstName'}

Я попытался получить имя только для блока ConsumerName, используя:

def block = new XmlSlurper().parseText(text).'ConsumerName'.findAll{it.name()=='FirstName'}

Но от этого ничего не возвращается, я не могу понять, что я делаю неправильно?

Ответы [ 2 ]

0 голосов
/ 17 июня 2019

Чтобы получить значение firstName в блоке ConsumerName XML, я использовал следующее:

def text = new File(requestFilePath).text
def fieldValue = new XmlSlurper().parseText(text).'**'.findAll{it.name()==tagBlockName}.getAt(tagName)[0]
def var = (String)fieldValue
0 голосов
/ 14 июня 2019

Я исправил ваш xml и предоставил ответ здесь:

def text = '<?xml version="1.0" encoding="UTF-8"?>' +
            '<cons:Consumer xmlns:cons="urn:corp:cons">' +
            '    <cons:ConsumerName>' +
            '        <cons:FirstName>Robert</cons:FirstName>' +
            '        <cons:MiddleName>John</cons:MiddleName>' +
            '        <cons:FamilyName>Smith</cons:FamilyName>' +
            '    </cons:ConsumerName>' +
            '' +
            '    <cons:ContactPersonName>' +
            '        <cons:FirstName>William</cons:FirstName>' +
            '        <cons:MiddleName>Michael</cons:MiddleName>' +
            '        <cons:FamilyName>Doe</cons:FamilyName>' +
            '    </cons:ContactPersonName>' +
            '</cons:Consumer>'

    def consumer = new XmlSlurper().parseText(text)

    println "Consumer first name: ${consumer.ConsumerName.FirstName}"

Вывод:

Consumer first name: Robert
...