Как я могу разобрать XML в Netsuite и получить определенное значение в groovy

ответ:

<?xml version="1.0" encoding="UTF-8"?><soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">   <soapenv:Header>
    <platformMsgs:documentInfo xmlns:platformMsgs="urn:messages_2014_2.platform.webservices.netsuite.com">
      <platformMsgs:nsId>WEBSERVICES_TSTDRV1371590_041220151334115279325827527_fefe8c</platformMsgs:nsId>
    </platformMsgs:documentInfo>   </soapenv:Header>   <soapenv:Body>
    <addResponse xmlns="">
      <platformMsgs:writeResponse xmlns:platformMsgs="urn:messages_2014_2.platform.webservices.netsuite.com">
        <platformCore:status xmlns:platformCore="urn:core_2014_2.platform.webservices.netsuite.com" isSuccess="true"/>
        <platformMsgs:baseRef xmlns:platformCore="urn:core_2014_2.platform.webservices.netsuite.com" internalId="5450" type="customer" xsi:type="platformCore:RecordRef"/>
      </platformMsgs:writeResponse>
    </addResponse>   
</soapenv:Body> 
</soapenv:Envelope>

как я могу получить внутренний идентификатор этого xml, используя groovy, мой код:

def slurper = новый XmlSlurper().parseText(response.text);


person pauleng    schedule 13.04.2015    source источник


Ответы (2)


Вы имеете в виду только:

def slurper = new XmlSlurper().parseText(response.text);
def id = slurper.Body.addResponse.writeResponse.baseRef.@internalId

assert id == '5450'
person tim_yates    schedule 13.04.2015
comment
черт, я вернул неправильный идентификатор... не смог найти внутренний идентификатор среди всего текста. XML не читается человеком :) - person billjamesdev; 13.04.2015
comment
Строка internalId = slurper['Body']['addResponse']['writeResponse']['baseRef'].@internalId - person pauleng; 17.04.2015

Самый простой ответ:

def slurper = new XmlSlurper().parseText(response.text)
def internalId = slurpXml['Body']['addResponse']['writeResponse']['baseRef'].attribute('internalId')

Конечно, это полностью игнорирует пространство имен. Однако в вашем примере вам не нужно беспокоиться об этом.

person billjamesdev    schedule 13.04.2015
comment
Я получил эту ошибку: поймано: org.codehaus.groovy.runtime.typehandling.GroovyCastException: невозможно преобразовать объект «WEBSERVICES_TSTDRV1371590_041220151323416430516371494_eca19dUNIQUE_CUST_ID_REQDA, запись клиента с этим идентификатором уже существует. Вы должны ввести уникальный идентификатор клиента для каждой создаваемой вами записи. Чтобы исправить эту запись, нажмите ‹a href='javascript:history.go(-1);';›назад‹/a› и введите новый идентификатор клиента в поле «Клиент». Затем нажмите «Отправить». с классом 'groovy.util.slurpersupport.NodeChild' в класс 'groovy.util.XmlSlurper' - person pauleng; 13.04.2015
comment
как мне объявить slurpXml, потому что он не может преобразовать объект slurpXml - person pauleng; 13.04.2015
comment
Попробуйте сейчас, используя def для первой переменной. Метод анализа текста не возвращает xmlslurper - person tim_yates; 13.04.2015
comment
Я уже сделал это. Я хочу получить внутренний идентификатор ответа xml, но я не могу получить его значение, поскольку оно находится под значением статуса. internalId имеет знак = Я не знаю, как получить значение - person pauleng; 13.04.2015