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

Reply via email to