Sony,
each FLWOR expression needs to be completed with a RETURN statement. Please insert the following snippet (haven't tried it live):
for $childentry in $c//childentry return replace value of $childentry with concat('New Child: ', $c//childentry/text())
Hope this helps, Christian ___________________________
Christian Grün Uni KN, Box 188 78457 Konstanz, Germany http://www.inf.uni-konstanz.de/~gruen
On Thu, Feb 24, 2011 at 9:24 PM, Sony Vijay sony.vibh@gmail.com wrote:
Christian, Thank you very much for helping me with the query. However, I am not quite sure how the transform operation works if I have to use a for loop. Say, I twist around yesterday's question a bit like so: copy $c :=
<entry> <id>1</id> <title>How to use a transform expression</title> <updated>2011-02-23</updated> <author> <name>BaseX Team</name> <uri>http://basex.org</uri> </author> <childentry> 1 </childentry> <childentry> 2 </childentry> <childentry> 3 </childentry> <content type="html">Transform expression example created by BaseX Team</content> </entry> modify ( replace value of node $c//name with 'BaseX', replace value of node $c//content with concat('Copy of: ', $c//content), insert node <member>Joey</member> into $c//author for $childentry in $c//childentry replace value of $childentry with concat('New Child: ', $c//childentry/text()) ) return $c
The expected output is:
<entry> <id>1</id> <title>How to use a transform expression</title> <updated>2011-02-23</updated> <author> <name>BaseX</name> <uri>http://basex.org</uri> <member>Joey</member> </author> <childentry> New Child: 1 </childentry> <childentry> New Child: 2 </childentry> <childentry> New Child: 3 </childentry> <content type="html">Copy of: Transform expression example created by BaseX Team</content> </entry> The following exception is thrown when I tried my sample transformation query with the for loop: [XPST0003] Expecting 'where', 'order' or 'return' expression. Thanks, Sony PS: @Lukas: I did notice the update in the documentation. Thank you !
On Wed, Feb 23, 2011 at 2:32 AM, Lukas Kircher lukaskircher1@googlemail.com wrote:
Hi Sony,
to help others with the same question, I allowed myself to add a modified version of your example to our documentation [1].
Regards, Lukas
[1] http://docs.basex.org/wiki/Update#transform
On Wed, Feb 23, 2011 at 6:58 AM, Sony Vijay sony.vibh@gmail.com wrote:
Christian, Thank you for the quick and helpful reply.
- Sony
On Tue, Feb 22, 2011 at 5:56 PM, Christian Grün christian.gruen@gmail.com wrote:
Sony,
the following query might do what you want:
copy $c := <entry xmlns="http://www.w3.org/2005/Atom" xmlns:libx="http://libx.org/xml/libx2"> <id>1</id> <title>Link Amazon By ISBN</title> <updated>2010-09-29T18:37:48.592Z</updated> <author> <name>LibX Team</name> <uri>http://libx.org</uri> <email>libx.org@gmail.com</email> </author> <content type="html">Content created by LibX Libapp Builder</content>
</entry> modify ( replace value of node $c//*:name with 'Sony', replace value of node $c//*:content with concat('Copy of: ', $c//*:content) ) return $c
Best, Christian ___________________________
On Tue, Feb 22, 2011 at 11:43 PM, Sony Vijay sony.vibh@gmail.com wrote:
Hi, I am using BaseX 6.5. I am trying to transform a given node using an XQuery.
Say, I have an node like so: <entry xmlns="http://www.w3.org/2005/Atom" xmlns:libx="http://libx.org/xml/libx2"> <id>1</id> <title>Link Amazon By ISBN</title> <updated>2010-09-29T18:37:48.592Z</updated> <author> <name>LibX Team</name> <uri>http://libx.org</uri> <email>libx.org@gmail.com</email> </author> <content type="html">Content created by LibX Libapp Builder</content>
</entry> I am trying to send this node to an xquery which is expected to do the following actions:
create a copy of this node (so that the actual node in the database does not change), transform/modify the duplicate copy of the given node return the modified duplicate copy of the given node
I would expect the output to be like so: <entry xmlns="http://www.w3.org/2005/Atom" xmlns:libx="http://libx.org/xml/libx2"> <id>1</id> <title>Link Amazon By ISBN</title> <updated>2010-09-29T18:37:48.592Z</updated> <author> <name>Sony</name> <uri>http://libx.org</uri> <email>libx.org@gmail.com</email> </author> <content type="html">Copy of: Content created by LibX Libapp Builder</content>
</entry> I tried to perform the non-updating functions using transform and also tried to use a pending update list (Reference: http://docs.basex.org/wiki/Update#transform). None of this works as expected. Could you refer me to a more detailed documentation for performing such transform operations on nodes ? Thanks, Sony
BaseX-Talk mailing list BaseX-Talk@mailman.uni-konstanz.de https://mailman.uni-konstanz.de/mailman/listinfo/basex-talk
BaseX-Talk mailing list BaseX-Talk@mailman.uni-konstanz.de https://mailman.uni-konstanz.de/mailman/listinfo/basex-talk