Subject:Help to access an element without using namespace Author:Kenneth Hall Date:21 May 2010 09:10 AM
I ma having a problem with an xpath statement that I am using to access the Base64Data element in the VerifyObjectResponse. I am not too clever when it comes to accesing elements that are in a node with a defined xmlns as is the case with the responses sent back by safeX. I want to get the Base64Data that is part of the Document identified by the Type OUTSTREAM as per this below...
For the purpose of getting the correct items in the XML below I have replaced the Base64Data text with EDIFACTDOC and 'status report'.
<?xml version="1.0" encoding="UTF-8"?>
<ProcessData>
<VerifyObject SCIObjectID="bod58cg1:node1:128b06869ae:535"/>
<SOAP_ACTION>""</SOAP_ACTION>
<ADD_SOAP_ENVELOPING>false</ADD_SOAP_ENVELOPING>
<SOAPEnvNSPrefix>soapenv</SOAPEnvNSPrefix>
<SOAPEnvNSURI>http://schemas.xmlsoap.org/soap/envelope/</SOAPEnvNSURI>
<SOAP_REQUEST_VERIFYOBJECT SCIObjectID="bod58cg1:node1:128b06869ae:566"/>
<SOAP_RESPONSE_VERIFYOBJECT SCIObjectID="bod58cg1:node1:128b06869ae:602"/>
<PrimaryDocument SCIObjectID="bod58cg1:node1:128b06869ae:607"/>
<VerifyObjectResponse xmlns="http://www.safeXworld.com/safeXEnterprise/security/3.3.0/schemas">
<Errors>None</Errors>
<Documents>
<Document>
<Name>CIPHER_org</Name>
<Type>OUTSTREAM</Type>
<Base64Data>EDIFACTDOC</Base64Data>
</Document>
<Document>
<Name>safeXProt10051914044725951.xml</Name>
<Type>PROTOCOLSTREAM</Type>
<Base64Data>status report</Base64Data>
</Document>
</Documents>
</VerifyObjectResponse>
</ProcessData>
If I remove the xmlns from the XML above in the VerifyObjectResponse node, the following xpath /ProcessData/VerifyObjectResponse/Documents/Document [Type='OUTSTREAM']/Base64Data returns 'EDIFACTDOC'
If the xmlns is in place as it is here, I modify the xpath to be //*[local-name()='VerifyObjectResponse']/*[local-name()='Documents']/*[local-name()='Document'] [Type='OUTSTREAM']/*[local-name()='Base64Data'] and I get a blank result.
Please assist with the correct xpath statement to get <Base64Data> from the <Document> whose <Type> is OUTSTREAM.