XML Editor
Sign up for a WebBoard account Sign Up Keyword Search Search More Options... Options
Chat Rooms Chat Help Help News News Log in to WebBoard Log in Not Logged in
Show tree view Topic
Go to previous topicPrev TopicGo to next topicNext Topic
Postnext
Eugene KirinSubject: "for" clause question
Author: Eugene Kirin
Date: 06 Jul 2005 06:49 AM
Hello! Please help me to resolve next problem:
I have got a xml file (please look attach) where
item element can be nested N times. I desperately tried to write recursion function, but without effect. Can you suggest me how better to realize recursion with xquery?
I can not realize this function cause I always get error "SequenceType matching failed: the sequence contains more than one item [err:XP0006]" when execute xquery:
-------------------
declare namespace gb="http://maven.ru/guidebooks/xquery";
(:reads toc items:)
declare function gb:tocItem($x as node())
as node() {
for $item in $x/item
return $item
};

gb:tocItem(/book/toc)
-------------------
Please point me what I do wrong.
And thanks for your responses!


Unknowntoc(1).xml

Posttop
(Deleted User) Subject: "for" clause question
Author: (Deleted User)
Date: 06 Jul 2005 08:04 AM
Hi Eugene,
the error is caused by the fact that the function is defined as returning a single node(), while it is returning a sequence of nodes.
You should change the declaration to be

declare function gb:tocItem($x as node())
as node()* {

As for the recursion, what do you want to obtain? If you want to flatten all the "item" nodes, you can use this function

declare function gb:tocItem($x as node())
as node()* {
for $item in $x/item
return
<item id="{$item/@id}">{$item/title}</item>,
for $item in $x/item
return
gb:tocItem($item)
};

or, if you prefer a depth-first navigation, this one

declare function gb:tocItem($x as node())
as node()* {
for $item in $x/item
return
(
<item id="{$item/@id}">{$item/title}</item>,
gb:tocItem($item)
)
};

Hope this helps,
Alberto

 
Go to previous topicPrev TopicGo to next topicNext Topic
Download A Free Trial of Stylus Studio 6 XML Professional Edition Today! Powered by Stylus Studio, the world's leading XML IDE for XML, XSLT, XQuery, XML Schema, DTD, XPath, WSDL, XHTML, SQL/XML, and XML Mapping!  
go

Log In Options

Site Map | Privacy Policy | Terms of Use | Trademarks
Stylus Scoop XML Newsletter:
W3C Member
Stylus Studio® and DataDirect XQuery ™are from DataDirect Technologies, is a registered trademark of Progress Software Corporation, in the U.S. and other countries. © 2004-2016 All Rights Reserved.