[xquery-talk] replacing a node in in-memory XML
Andrew Welch
andrew.j.welch at gmail.com
Tue Nov 6 16:15:58 PST 2007
Doesn't the OP want to set service/@value to true that matches the input?
If so the XSLT could be the "identity template + plus specific
template" pattern:
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
<xsl:template match="services">
<services>
<service value="{service = 1}">1</service>
<service value="{service = 2}">2</service>
<service value="{service = 3}">3</service>
</services>
</template>
which i think is quite nice and easy to read too, once you get the way
apply-templates works. It's also very easy to add further specific
templates, and of course its open to be overridden by a stylesheet
that imports it.
On 06/11/2007, John Snelson <john.snelson at oracle.com> wrote:
> Hi Wolfgang,
>
> In the absence of XQuery Update, I really like your technique for doing
> this transformation. I think it's actually simpler and easier to read
> than the equivalent XSLT.
>
> John
>
> Wolfgang Meier wrote:
> > Hi Robert,
> >
> >> I am trying to figure out the best way to replace a node within an in-memory
> >> XML fragment.
> >
> > I really like to use the typeswitch statement for things like this:
> >
> > declare function t:replace($node as node()) as node() {
> > typeswitch ($node)
> > case $elem as element(services) return
> > <services>
> > <service value="false">1</service>
> > <service value="true">2</service>
> > <service value="false">3</service>
> > </services>
> > case $elem as element() return
> > element { node-name($elem) } {
> > $elem/@*, for $child in $elem/node() return t:replace($child)
> > }
> > default return $node
> > };
> >
> > t:replace(doc("test.xml")/*)
> >
> > Wolfgang
> > _______________________________________________
> > talk at x-query.com
> > http://x-query.com/mailman/listinfo/talk
>
>
> --
> John Snelson, Oracle Corporation
> Berkeley DB XML: http://www.oracle.com/database/berkeley-db/xml
> XQilla: http://xqilla.sourceforge.net
> _______________________________________________
> talk at x-query.com
> http://x-query.com/mailman/listinfo/talk
>
--
Andrew Welch
http://andrewjwelch.com
Kernow: http://kernowforsaxon.sf.net/
More information about the talk
mailing list