2016-05-06 2 views
0

zu bekommen Ich bin nicht nicht in der Lage Knotenwert für „IDNumber“ in dem folgenden Reaktion xmlnicht in der Lage Knotenwert in der XPath durch GetNodeValue Funktion in groovy

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"> 
    <soapenv:Body> 
     <SOAP_Customer_Metadata_CALLResponse xmlns="http://BCE/Customer_Metadata_WS.tws"> 
     <oMetaDataID> 
      <ocrStatus>Failed</ocrStatus> 
      <guid>123456</guid> 
      <docType>03</docType> 
      <docDescription>South African ID</docDescription> 
      <surname>Choudhary</surname> 
      <fullName>Kanika</fullName> 
      <idNumber>KANJANDHS293</idNumber> 
      <dateOfBirth>22091945</dateOfBirth> 
      <dateIssued>01012016</dateIssued> 
      <countryOfBirth>India</countryOfBirth> 
      <idType>ID</idType> 
      <gender>F</gender> 
     </oMetaDataID> 
     <oMetaDataPOA> 
      <ocrStatus>Passed</ocrStatus> 
      <surname>Choudhary</surname> 
      <idNo>12345</idNo> 
      <address1>abc def</address1> 
     </oMetaDataPOA> 
     <oResubmission>No</oResubmission> 
     <oCASASequenceNo>1234578</oCASASequenceNo> 
     <oTypeOfCustomer>New</oTypeOfCustomer> 
     </SOAP_Customer_Metadata_CALLResponse> 
    </soapenv:Body> 
</soapenv:Envelope> 

Mit dem Folge Code in einem Groovy zu erhalten Skript Testschritt:

holder.getNodeValue("//idNumber") 

Antwort

0

Wie @ har07 Antworten Sie ein Namespacepräfix definieren und es dann in Ihrem XPath verwenden:

Ein Äquivalent, rein XPath, Art und Weise Kombination von XPath-Funktionen local-name() und namespace-uri() verwenden würden. Jedoch SOAPUIXmlHolder Wildcard * für Namensräume unterstützt, so dass Sie sich einfach auf Ihrem XPath verwenden:

holder.getNodeValue("//*:idNumber") 

EDIT

Das Problem mit holder.getNodeValue("//*:oMetaDataID/ocrStatus"), wie Sie im Kommentar tun ist, dass Sie‘ Wenn der Namespace für das zweite Element fehlt, können Sie auch hier * als Platzhalter verwenden:

holder.getNodeValue("//*:oMetaDataID/*:ocrStatus") 
+0

Danke @albciff. dieses hat gut funktioniert. Wenn ich mit "halter.getNodeValue" ("// *: oMetaDataID/ocrStatus") versuchte, auf "ocrStatus" unter dem Tag "oMetaDataID" zuzugreifen, bekam ich nichts. Bitte helfen Sie – Bhushan

1

, die wahrscheinlich ist, weil die XML hat Standard-Namespace:

xmlns="http://BCE/Customer_Metadata_WS.tws" 

Alle Elemente ohne Präfix innerhalb SOAP_Customer_Metadata_CALLResponse, einschließlich idNumber, werden in diesem Namensraum berücksichtigt. Um ein Element im Standardnamespace auszuwählen, müssen Sie dem Standardnamespace-URI ein Präfix zuordnen und dieses Präfix im XPath verwenden. Zum Beispiel, wenn das registrierte Präfix d: //d:idNumber ist (ich weiß nicht, groovy aber this post könnte nützlich sein).

//*[local-name()='idNumber' and namespace-uri()='http://BCE/Customer_Metadata_WS.tws']