[xquery-talk] last possible child's attribute

Michalmas michalmas at gmail.com
Sun Mar 8 14:45:34 PST 2009


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
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://x-query.com/pipermail/talk/attachments/20090308/186b77e9/attachment-0001.htm


More information about the talk mailing list