2015-05-13 5 views
0

Если я ответ Soap как нижеСинтаксический мыло ответ - XML ​​/ XPATH (В SoapUI) (пространство имен в ответ SoapUI)

<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:Body> 
     <ns0:SomeResponse xmlns:ns0="urn:ABC:EFG:HIJ:Some_WS"> 
     <ns0:ID>6384</ns0: ID> 
     <ns0:Some_ID>10530</ns0: Some_ID > 
     <ns0:Status>SomeStatus</ns0:Status> 
     <ns0:Number>INT1037;INT1027;</ns0: Number> 
     </ns0:SomeResponse > 
    </soapenv:Body> 
</soapenv:Envelope> 

Как я могу получить Some_ID значение. Я использую приведенный ниже код в SoapUI, чтобы получить значение Some_ID.

... 
def response = tstep.getPropertyValue("response"); 
def gutils = new com.eviware.soapui.support.GroovyUtils(context); 
def holder = gutils.getXmlHolder("$response"); 
// define namespace 
holder.namespaces["ns0"] = "http://www.w3.org/2001/XMLSchema-instance" 
def val1 = holder.getNodeValue("//ns0:SomeResponse/ns0:Some_ID"); 
log.info(val1) 

Но log.info дает мне null значение.

ответ

3

Чтобы получить только, что одно конкретное значение, вы можете использовать простой:

def val1 = context.expand('${TestStepName#Response#//*:Some_ID}') 

Для более сложного синтаксического анализа, вам придется использовать либо XmlHolder или XmlParser или XmlSlurper. Вы можете получить представление об этом от official documentation.

В вашем скрипте, попробуйте использовать tstep.getPropertyValue("Response"), с прописной R.

+0

проверено. Это тоже работает. Но просто удивляясь, почему всюду я искал, люди просили объявить «пространства имен» в случае, если это ответ на мыло. – user1207289

+1

Потому что большинство людей не понимают пространства имен в XML. Для * записи * XML они необходимы. Для * чтения * XML они являются необязательными. Для чтения простого XML, такого как ваш случай, они излишне усложняют ситуацию. – SiKing

+0

@SiKing полностью согласен ':)' – albciff

0

Я получил это работает. Я должен был изменить декларацию namespaces ниже, и вот она.

holder.namespaces["ns0"] = "urn:ABC:EFG:HIJ:Some_WS" 
Смежные вопросы