I was just reading about some ColdFusion XPath functionality over on Anuj Gakhar's blog. One of the things that he demonstrated was that XmlSearch() could return things like count() and sum() on a node set. I was a little shocked that I had missed this as part of my XPath and XmlSearch() ColdFusion Tutorial. So, naturally, I went and tried it on my test server:
<!--- Create an XML document. ---> <cfxml variable="xmlData"> <data> <datum>1.1</datum> <datum>3.2</datum> <datum>4.5</datum> <datum>7.8</datum> <datum>10.9</datum> </data> </cfxml> <!--- Get the sum of node values. ---> <cfset arrNodes = XmlSearch( xmlData, "sum( //datum )" ) /> <!--- Dump out resultant nodes. ---> <cfdump var="#arrNodes#" />
Running this, we get the following output:
Unbelievable! It worked.
After the shock of having missed this in my initial research wore off a bit, I realized that I was viewing the page as a ColdFusion 8 page (which we have running on an alternate port). Switch the page over to the ColdFusion 7 port and running the page again, I got the following ColdFusion error:
An error occured while Transforming an XML document. Can not convert #NUMBER to a NodeList!
Ahhh, that's what I am used to. Looks like ColdFusion 8 has beefed up the XPath support. And, indeed, looking at the ColdFusion 8 livedocs, I see this in the History:
ColdFusion 8: Added support for returning any valid XPath result, not just arrays of XML object nodes.
This is good to know. XPath and XmlSearch() are some very powerful tools to have in the tool belt, and it looks like ColdFusion 8 is making them even more powerful. Man, I love this language!
I am working on some XPath stuff right now. Thanks for the help!
Does anyone happen to know what specific version of xPath ColdFusion 8.0.1 uses?
(Trying to pin down which xPath features CF 8 supports...)