|
[XQuery Talk Mailing List Archive Home] [By Date] [By Thread] [By Subject] [By Author] [Recent Entries] [Reply To This Message] xquery: iteration simulationG. Ken Holman gkholman at CraneSoftwrights.comSun Mar 8 17:57:10 PST 2009
At 2009-03-08 17:16 -0400, I wrote: >It would help volunteers if you could post a contrived example of >the nature of the structures. Not all 50 levels, but still, some examples. >... >>Now, i need to query it. But what i need to do, is to make queries >>of the form: >> >>count(mainNode//someStr) >>count(mainNode//someStr/someStr) >>(...) >>count(mainNode//someStr/someStr/someStr/someStr/someStr/someStr/someStr/someStr) Below is a query that gives those results taken from a very different angle. It won't be fast because of the ancestor counting at every level, and the use of distinct-values() requires me to work with strings. It might improve with a recursive call that tracks depth and passes it ... but you didn't say that performance would be an issue. >How are you expressing the "someStr" name? Is it fixed? Is it variable? I made an assumption that there is an XML file listing the keywords. >>The deep level of the last query may be even around 50 (so, 50 queries). The solution below works at all depths, but I didn't know what criteria you had for counting the ancestors ... I assumed you are only counting ancestors of the same name. And I'm ignoring changes in namespace prefixes, relying on the full name for distinction. >>Is is posible to write iteration in XQuery for that. Or pass it as >>a function? The example below is only one query, not a chain as I first thought. I hope this helps you create the kind of result that you need. . . . . . . . . Ken t:\ftemp>type michal-data.xml <mainNode> <x> <someStr> <someStr> <y/> <someStr> <z> <someStr/> </z> </someStr> </someStr> <anotherStr> <anotherStr> <anotherStr/> </anotherStr> <anotherStr> <anotherStr/> <anotherStr> <anotherStr/> </anotherStr> </anotherStr> </anotherStr> </someStr> </x> <someStr> <y/> <someStr> <z> <someStr/> </z> </someStr> </someStr> </mainNode> t:\ftemp>type michal-keywords.xml <keywords> <keyword>someStr</keyword> <keyword>anotherStr</keyword> </keywords> t:\ftemp>call xquery michal-data.xml michal.xq Element named "anotherStr" at depth 1 occurred 1 times. Element named "anotherStr" at depth 2 occurred 2 times. Element named "anotherStr" at depth 3 occurred 3 times. Element named "anotherStr" at depth 4 occurred 1 times. Element named "someStr" at depth 1 occurred 2 times. Element named "someStr" at depth 2 occurred 2 times. Element named "someStr" at depth 3 occurred 2 times. Element named "someStr" at depth 4 occurred 1 times. t:\ftemp>type michal.xq declare namespace saxon = "http://saxon.sf.net/"; declare option saxon:output "method=text"; let $depths as element(depth)+ := for $each in //* return <depth> { count($each/ancestor-or-self::*[name(.)=name($each)]), name($each) } </depth> return string-join( for $each in distinct-values( $depths ), $name in doc('michal-keywords.xml')/*/keyword where $name = substring-after($each,' ') order by substring-after($each,' '), xs:integer( substring-before($each,' ') ) return ( concat( 'Element named "',substring-after($each,' '), '" at depth ',substring-before($each,' '), ' occurred ',string(count($depths[.=$each])), ' times.') ), '
' ) t:\ftemp>rem Done! -- 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:http://x-query.com/mailman/listinfo/talk 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
|
PURCHASE STYLUS STUDIO ONLINE TODAY!Purchasing Stylus Studio from our online shop is Easy, Secure and Value Priced! Download The World's Best XML IDE!Accelerate XML development with our award-winning XML IDE - Download a free trial today! Subscribe in XML format
|






