Sure, some functions work on multiple nodes and they are awesome for all sorts of things. I just hesitate to use a function that will blow up if more than one node is returned when you can write a function that will always return the first node and therefore not blow up. I've just had two many times where I've written code that assumes that a query/search/whatever will only return one record and it works fine with all my test cases (because there is only supposed to be one record so that's what I put in my test case) and then lo and behold, someone inserts a second matching record and things start throwing errors because of that assumption I made.
Cheers, Judah On Wed, Dec 7, 2011 at 2:24 PM, Raymond Camden <raymondcam...@gmail.com> wrote: > > The poster asked about getting a text value, so obviously he was using > a xpath search that matched one value. So... don't do it on ones that > would return multiple. You can use functions on multiple things > though. For example: > > <cfxml variable="test"> > <employee> > <salary>200</salary> > <salary>100</salary> > </employee> > </cfxml> > > <cfset r = xmlSearch(test, "sum(//employee/salary)")> > <cfdump var="#r#"> > > On Wed, Dec 7, 2011 at 4:06 PM, Judah McAuley <ju...@wiredotter.com> wrote: >> >> But what happens if there is more than one node that matches your >> search? Searches expect to return one or more results, which is why >> it returns an array. Trying to turn what may be a complex result into >> a simple string with no logic seems like an unstable approach, unless >> I'm misunderstanding the question (which happens plenty). >> >> Instead, I'd write a UDF called FirstXMLNodeText or some some such >> that you pass an XPath value to along with an xml doc and then have it >> return the XmlText of the first array result returned. >> >> What you are doing with the array is correct, in my opinion. If it is >> too much typing and you are doing it a lot, build a function to do it. >> >> Cheers, >> Judah >> >> On Wed, Dec 7, 2011 at 1:56 PM, Raymond Camden <raymondcam...@gmail.com> >> wrote: >>> >>> You can use functions to get values: >>> >>> >>> >>> <cfxml variable="test"> >>> <employee> >>> <startDate>09-09-2009</startDate> >>> </employee> >>> </cfxml> >>> >>> <cfset r = xmlSearch(test, "string(//employee/startDate)")> >>> <cfdump var="#r#"> >>> >>> Docs: http://www.w3schools.com/xpath/xpath_functions.asp#string >>> >>> On Wed, Dec 7, 2011 at 3:23 PM, Dominic Watson >>> <watson.domi...@googlemail.com> wrote: >>>> >>>> It's getting old in the tooth and could do with some JavaLoader love, >>>> but this project can help with that sorta thing: >>>> >>>> http://betterxml.riaforge.org >>>> >>>> Dominic >>>> >>>> On 7 December 2011 21:09, Christophe Maso <zum...@hotmail.com> wrote: >>>>> >>>>> Is there any way to get the "09-09-2009" string using xmlSearch() for the >>>>> below xml? >>>>> >>>>> <employee> >>>>> <startDate>09-09-2009</startDate> >>>>> </employee> >>>>> >>>>> I've been doing something like this, which is a real pain: >>>>> >>>>> arrDate = xmlSearch(xml, "//employee/startDate"); >>>>> strDate = arrDate[1].XmlText; >>>>> >>>>> It seems that xmlSearch() must always return an array and is unable to >>>>> return a string, which makes sense, but using the above code has gotten >>>>> old, real fast. >>>>> >>>>> >>>> >>>> >>> >>> >> >> > > ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~| Order the Adobe Coldfusion Anthology now! http://www.amazon.com/Adobe-Coldfusion-Anthology/dp/1430272155/?tag=houseoffusion Archive: http://www.houseoffusion.com/groups/cf-talk/message.cfm/messageid:349019 Subscription: http://www.houseoffusion.com/groups/cf-talk/subscribe.cfm Unsubscribe: http://www.houseoffusion.com/groups/cf-talk/unsubscribe.cfm