Solved

Coldfusion - XMLSearch Help

Posted on 2009-06-30
6
849 Views
Last Modified: 2012-05-07
I have the XMl below returned from a Soap request.  I'm interested in the 'SalesLeadsStatisticsRecord' node (and elements below it).  I'm struggling to get my head around exactly what I need to be putting in the xmlSearch to find this.  Specifically, the namespaces are throwing me.

This is what I have on the CF side, and below an except from the XML I'm working with;

<cfscript>
  xmlContent = XMLParse(trim(cfhttp.FileContent));
  xmlNode = xmlSearch(xmlContent, "//GetSalesLeadsStatisticsResponse/GetSalesLeadsStatisticsRecords/a:SalesLeadsStatisticsRecords/a:SalesLeadsStatisticsRecord");
</cfscript>
<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/">

   <s:Body>

      <GetSalesLeadsStatisticsResponse xmlns="http://affilinet.framework.webservices/Svc">

         <SalesLeadsStatisticsRecords xmlns:a="http://affilinet.framework.webservices/types/PublisherStatistics" xmlns:i="http://www.w3.org/2001/XMLSchema-instance">

            <a:TotalConfirmed>3.29</a:TotalConfirmed>

            <a:TotalOpen>0</a:TotalOpen>

            <a:TotalCancelled>0</a:TotalCancelled>

            <a:SalesLeadsStatisticsRecords>

               <a:SalesLeadsStatisticsRecord>

                  <a:Date>2009-06-29T00:00:53</a:Date>

                  <a:ProgramTitle>XYZRetailer</a:ProgramTitle>

                  <a:SubId>bcnx</a:SubId>

                  <a:CommissionDescription>Sale: 2 % von 164.95 EUR</a:CommissionDescription>

                  <a:Commission>3.29</a:Commission>

                  <a:Information>Note in the case of cancellation</a:Information>

                  <a:CheckDate>2009-06-30T00:00:00</a:CheckDate>

                  <a:ProgramId>0</a:ProgramId>

                  <a:TransactionStatus>Confirmed</a:TransactionStatus>

               </a:SalesLeadsStatisticsRecord>

            </a:SalesLeadsStatisticsRecords>

         </SalesLeadsStatisticsRecords>

      </GetSalesLeadsStatisticsResponse>

   </s:Body>

</s:Envelope>

Open in new window

0
Comment
Question by:Reveroom
  • 3
  • 3
6 Comments
 
LVL 27

Expert Comment

by:BigRat
ID: 24752608
Yet another XPath implementation which doesn't support XPath!

And XPath strictly speaking is NOT namespace aware.

And ColdFusion has a funny way of doing things with default namespaces.

That all said read : http://www.talkingtree.com/blog/index.cfm/2005/11/18/XmlSearchNoNameNamespace

and try puting a colon in from of those nodes with a default name space :-

xmlNode = xmlSearch(xmlContent, "//:GetSalesLeadsStatisticsResponse/:GetSalesLeadsStatisticsRecords/a:SalesLeadsStatisticsRecords/a:SalesLeadsStatisticsRecord");

0
 

Author Comment

by:Reveroom
ID: 24752631
Thanks for the reply, BigRat.

I'd actually already seen that article, and tried various alternatives as possible solutions.  Again, no dice.

Doing a straight 'copy & paste' of your code, the following error is returned:

"Prefix must resolve to a namespace: "
0
 
LVL 27

Expert Comment

by:BigRat
ID: 24753512
Nil desperandum, let's try a couple of options

1) any namespace (since exactly what namespace we are using doesn't mater in this case) :-

xmlNode = xmlSearch(xmlContent, "//*:GetSalesLeadsStatisticsResponse/*:GetSalesLeadsStatisticsRecords/a:SalesLeadsStatisticsRecords/a:SalesLeadsStatisticsRecord");

2) localname predicate

xmlNode = xmlSearch(xmlContent, "//*[local-name()='GetSalesLeadsStatisticsResponse']/:[local-name()='GetSalesLeadsStatisticsRecords']/a:SalesLeadsStatisticsRecords/a:SalesLeadsStatisticsRecord");



0
DevOps Toolchain Recommendations

Read this Gartner Research Note and discover how your IT organization can automate and optimize DevOps processes using a toolchain architecture.

 

Author Comment

by:Reveroom
ID: 24753612
Thanks BigRat, I appreciate you taking the time to look at this.

Still no dice however - same response as previous with both additional options :-(
0
 
LVL 27

Accepted Solution

by:
BigRat earned 500 total points
ID: 24753910
Well, it seems that the bug has either been corrected in a way which is completely different to all the system I know, or it has not been corrected but made worse.

Let us try to avoid XPath and try a DOM access.

What do you get with :-

    xmlContent.Envelope.Body.GetSalesLeadsStatisticsResponse.SalesLeadsStatisticsRecords.SalesLeadsStatisticsRecords

?
0
 

Author Comment

by:Reveroom
ID: 24754078
Thanks BigRat,

I no longer get the namespace error with that, however no results are returned.  I did a cfdump of the cfhttp response (which, in hindsight I should have done earlier), and noted that the response is actually an error.

<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/"><s:Body><s:Fault><faultcode xmlns:a="http://schemas.microsoft.com/ws/2005/05/addressing/none">a:ActionNotSupported</faultcode><faultstring xml:lang="en-US">The message with Action '' cannot be processed at the receiver, due to a ContractFilter mismatch at the EndpointDispatcher. This may be because of either a contract mismatch (mismatched Actions between sender and receiver) or a binding/security mismatch between the sender and the receiver. Check that sender and receiver have the same contract and the same binding (including security requirements, e.g. Message, Transport, None).</faultstring></s:Fault></s:Body></s:Envelope>

I haven't actually changed anything in the Soap request since bringing it in from soapUI, so I'm even more confused than I was before now!  Clearly, this is presumably where the underlying problem is though.

I guess solving that issue is beyond the scope of this question though, so I'll go ahead and award points for giving me the guidance with the original question.
0

Featured Post

Is Your Active Directory as Secure as You Think?

More than 75% of all records are compromised because of the loss or theft of a privileged credential. Experts have been exploring Active Directory infrastructure to identify key threats and establish best practices for keeping data safe. Attend this month’s webinar to learn more.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Suggested Solutions

Title # Comments Views Activity
Optimum versions of Selenium Webdriver with Python On Windows 7 1 81
c# code 19 69
coldfusion cfloop help 6 25
Excel file not created as expected 7 51
PROBLEM: How to add your own buttons to the bottom toolbar with paging info ( result count ). While creating a cfgrid, I ran into an issue where I wanted to embed my own custom buttons where the default ones ( insert / delete / etc… ) are for aes…
Browsing the questions asked to the Experts of this forum, you will be amazed to see how many times people are headaching about monster regular expressions (regex) to select that specific part of some HTML or XML file they want to extract. The examp…
This Micro Tutorial demonstrates using Microsoft Excel pivot tables, how to reverse engineer competitors' marketing strategies through backlinks.
Both in life and business – not all partnerships are created equal. As the demand for cloud services increases, so do the number of self-proclaimed cloud partners. Asking the right questions up front in the partnership, will enable both parties …

861 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question

Need Help in Real-Time?

Connect with top rated Experts

22 Experts available now in Live!

Get 1:1 Help Now