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
Bruce CantorSubject: Xquery update support?
Author: Bruce Cantor
Date: 29 Mar 2023 01:56 PM
Hi

Can anyone tell me if xquery updates is supported on the pipeline server?

The scenario is that I have an XML document where I only need to change a couple of values (for a known element).

In xslt I would create a template and use the identity template to copy everything else.

But in xquery, I am unsure how do this without having to rewrite the full input document again.

Your help is much appreciated.

kind regard
Bruce

Posttop
Ivan PedruzziSubject: Xquery update support?
Author: Ivan Pedruzzi
Date: 29 Mar 2023 05:28 PM
See example below for how to use a similar approach to the XSLT identity transform.

Function local:filter is where you can write your logic for altering the content.


Ivan Pedruzzi
Stylus Studio Team


declare namespace i = "urn:my-nice-namespace";


declare variable $test-input :=
<i:root xmlns:i="urn:my-nice-namespace">
<i:car make="Ferrari" model="PuroSangue">
<i:engine type="V12" volume="6,496"/>
</i:car>
</i:root>;


declare function local:filter($node as element()) as node()?
{
if ( fn:namespace-uri($node) = 'urn:my-nice-namespace'
and fn:local-name($node) = 'car'
and $node/@make = 'Ferrari'
and $node/@model = 'PuroSangue') then

element {name($node)} {
$node/@*, (: Copy all attributes :)

attribute {"revealed"} {"2022-09-13"}, (:add an extra attribute:)

for $child in $node/node()
return local:identity-transform($child) (: Recursive call on child nodes :)
}

else ()
};


declare function local:identity-transform($node as node()) as node()*
{
if ($node instance of element()) then
let $filter := local:filter($node)
return
if (not(fn:empty($filter))) then $filter
else
element {name($node)} {
$node/@*, (: Copy all attributes :)
for $child in $node/node()
return local:identity-transform($child) (: Recursive call on child nodes :)
}
else if ($node instance of attribute()) then
attribute {name($node)} {string($node)}
else $node (: Copy all other nodes unmodified :)
};

declare option ddtek:serialize "indent=yes";

local:identity-transform($test-input)

 
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.