[xquery-talk] last possible child's attribute
Christian Grün
christian.gruen at gmail.com
Sun Mar 8 14:53:18 PST 2009
Hi Michalmas,
this one might help: string(/descendant::@lc[last()])
Christian
On Sun, Mar 8, 2009 at 2:45 PM, Michalmas <michalmas at gmail.com> wrote:
> Hi,
>
> It still gives me the same error:
>
>> XQuery Serialization Error!
>> A document node may not have an attribute node or a namespace node as a
>> child
>
> @Ken:
> Yes, i meant last possible node that has a value for given attribute.
>
> On Sun, Mar 8, 2009 at 2:32 PM, G. Ken Holman
> <gkholman at cranesoftwrights.com> wrote:
>>
>> At 2009-03-08 13:43 +0100, Michalmas wrote:
>>>
>>> What i need to get in xquery is the last possible child's attribute.
>>
>> It looks to me like you need the last possible descendant's attribute, not
>> child.
>>
>>> Let's say i have following XML:
>>>
>>> <a>
>>> <aa lc=1>
>>> <aaa lc=00>
>>> </aaa>
>>> </aa>
>>> <bb lc=0>
>>> </bb>
>>> <zz lc=1>
>>> <ccc lc=123>
>>> </ccc>
>>> </zz>
>>> </a>
>>>
>>> and i want to get the last child of 'a' node. So, in this case, it would
>>> be node 'ccc'. Then, i want to get lc attribute - in this example, 123.
>>
>> Two ways you could express it, based on how easy you think each will be
>> maintained by someone reading your code:
>>
>> To be explicit, you want the attribute of the last descendant of the
>> element:
>>
>> a/descendant::*[last()]/@lc
>>
>> To be concise, you want the last attribute descending from the element:
>>
>> (a//@lc)[last()]
>>
>> The code below shows both of those working ... and I doubt there would be
>> any difference in execution time ... choose whichever one "reads" better
>> from a maintenance perspective.
>>
>> I believe maintenance of transforms is as important as performance ... let
>> the processor worry about the optimization of the performance.
>>
>> BTW, I'm assuming you know the attribute's name. There is no such concept
>> as "last specified attribute" for a given element, because attributes along
>> the attribute axis are in an arbitrary order, they are not in specified
>> order. I find many students assume that just because they specified
>> attributes in a particular order they are going to find them in that order
>> when they walk the attribute axis. XML says that attributes are unordered.
>> In the data model, they have an order, you just don't know what that order
>> is. So you can reliably walk over an attribute axis multiple times in one
>> transformation and get the attributes in the same order each time during
>> that transformation, but they won't necessarily be in that order the next
>> time or with another processor.
>>
>> I hope this helps.
>>
>> . . . . . . . . . . Ken
>>
>> t:\ftemp>type michalmas.xml
>> <a>
>> <aa lc="1">
>> <aaa lc="00">
>> </aaa>
>> </aa>
>> <bb lc="0">
>> </bb>
>> <zz lc="1">
>> <ccc lc="123">
>> </ccc>
>> </zz>
>> </a>
>>
>> t:\ftemp>type michalmas.xq
>> string( a/descendant::*[last()]/@lc ),
>> string( (a//@lc)[last()] )
>> t:\ftemp>xquery michalmas.xml michalmas.xq
>> <?xml version="1.0" encoding="UTF-8"?>123 123
>> t:\ftemp>
>>
>> --
>> XQuery/XSLT training in Prague, CZ 2009-03 http://www.xmlprague.cz
>> XQuery/XSLT/XSL-FO training in Los Angeles/Anaheim - 2009-06-01/10
>> Training tools: Comprehensive interactive XSLT/XPath 1.0/2.0 video
>> Video lesson: http://www.youtube.com/watch?v=PrNjJCh7Ppg&fmt=18
>> Video overview: http://www.youtube.com/watch?v=VTiodiij6gE&fmt=18
>> G. Ken Holman mailto:gkholman at CraneSoftwrights.com
>> Crane Softwrights Ltd. http://www.CraneSoftwrights.com/q/
>> Male Cancer Awareness Nov'07 http://www.CraneSoftwrights.com/q/bc
>> Legal business disclaimers: http://www.CraneSoftwrights.com/legal
>>
>> _______________________________________________
>> talk at x-query.com
>> http://x-query.com/mailman/listinfo/talk
>
>
> _______________________________________________
> talk at x-query.com
> http://x-query.com/mailman/listinfo/talk
>
--
___________________________
Christian Gruen
Universitaet Konstanz
Department of Computer & Information Science
D-78457 Konstanz, Germany
Tel: +49 (0)7531/88-4449, Fax: +49 (0)7531/88-3577
http://www.inf.uni-konstanz.de/~gruen
More information about the talk
mailing list