• Global community
    • Language:
      • Deutsch
      • English
      • Español
      • Français
      • Português
  • 日本語コミュニティ
    Dedicated community for Japanese speakers
  • 한국 커뮤니티
    Dedicated community for Korean speakers
Exit
0

Xpath with XML from a Web Service

New Here ,
Apr 16, 2009 Apr 16, 2009

Copy link to clipboard

Copied

HI,

I have been hacking away pulling data from a webservice and have managed to get the results that I need so I am now at the stage where I want to do something useful with the XML that is returned so I have been playing with Xpath.

As I understand it I can use Xsearch to pull nodes from the XML object rather than have to write the XML out to a file and then search through the file. The problem I am having is that when I use Xsearch it doesn't extract the data that I expect it to.

Here is the XML that is returned from the web service which I assign to the variable xmlReturned:

<?xml version="1.0" encoding="utf-8"?>

<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">

     <soap:Body>

          <GetChildLocationsResponse xmlns="http://tempuri.org/VillarentersWebService/villa_search">

               <GetChildLocationsResult>

                    <RequestedParentID>3924</RequestedParentID>

                    <VRF />

                     <ChildLocations>

<Location>

<LocationRef>10</LocationRef>

<LocationDescription>Argentina</LocationDescription>

<ParentID>3924</ParentID>

</Location>

<Location>

<LocationRef>30</LocationRef>

<LocationDescription>Brazil</LocationDescription>

<ParentID>3924</ParentID>

</Location>

</ChildLocations>

</GetChildLocationsResult>

</GetChildLocationsResponse>

</soap:Body>

</soap:Envelope>

So when I use :

<cfset locDescription = XmlSearch(xmlReturned, "//LocationDescription") />

<cfdump var="#locDescription#">

I am expecting to see an array with 2 elements, Argentina and Brazil. What I actually get is an empty array. I have tried using a really handy online Xpath checker at http://www.zrinity.com/xml/xpath/index.cfm and I get the same result. I tried a few different searches but each time the array is empty.

Does anyone know why it isn't pulling the requested nodes into the array? Am I missing something very simple here?

TOPICS
Advanced techniques

Views

529

Translate

Translate

Report

Report
Community guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
community guidelines

correct answers 1 Correct answer

Valorous Hero , Apr 16, 2009 Apr 16, 2009

Or you could account for the namespaces in your xmlsearch xpath properties.

Here is the first link I got from a Google search for "xmlsearch namespace"

http://www.aftergeek.com/2006/08/xmlsearch-xpath-and-xml-namespaces-in.html

Votes

Translate

Translate
Advocate ,
Apr 16, 2009 Apr 16, 2009

Copy link to clipboard

Copied

I've had issues in both Flex and CFML with namespaces in the SOAP XML returned from a Web Service. It might be worth trying to remove (strip out or otherwise) the SOAP namespace and run your test again. You could even just manually use the XML from your post (strip out the soap: stuff) and try to navigate the document with XPath to see if that took care of it. I know it took care of some XML parsing and traversing for me in the past.

Votes

Translate

Translate

Report

Report
Community guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
community guidelines
New Here ,
Apr 16, 2009 Apr 16, 2009

Copy link to clipboard

Copied

Thanks for that suggestion. I tried stripping out the namespaces and Xpath did return what I was looking for. I used:

<cfset xmlReturned = ReReplaceNoCase(#xmlReturned#, "<soap:[^>]*>|</soap[^>]*>|<getChildLocationsResponse[^>]*>|</getChildLocationsResponse[^>]*>", "", "ALL" ) />

which isn't the most elegant solution but it has done the trick for now.

Votes

Translate

Translate

Report

Report
Community guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
community guidelines
Valorous Hero ,
Apr 16, 2009 Apr 16, 2009

Copy link to clipboard

Copied

Or you could account for the namespaces in your xmlsearch xpath properties.

Here is the first link I got from a Google search for "xmlsearch namespace"

http://www.aftergeek.com/2006/08/xmlsearch-xpath-and-xml-namespaces-in.html

Votes

Translate

Translate

Report

Report
Community guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
community guidelines
New Here ,
Apr 16, 2009 Apr 16, 2009

Copy link to clipboard

Copied

LATEST

ianskinner wrote:

Or you could account for the namespaces in your xmlsearch xpath properties.

Here is the first link I got from a Google search for "xmlsearch namespace"

http://www.aftergeek.com/2006/08/xmlsearch-xpath-and-xml-namespaces-in.html

WOW, that certainly simplifies things a bit! That is one elegant solution, I'll give it a try. Thanks.

Votes

Translate

Translate

Report

Report
Community guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
community guidelines
Resources
Documentation