[xquery-talk] replacing a node in in-memory XML
John Snelson
john.snelson at oracle.com
Tue Nov 6 16:35:23 PST 2007
Maybe there's not a lot of difference in the two examples given - but I
guess my preference will always be for a non-XML syntax for my code if I
have a choice.
John
Andrew Welch wrote:
> 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
>>
>
>
--
John Snelson, Oracle Corporation
Berkeley DB XML: http://www.oracle.com/database/berkeley-db/xml
XQilla: http://xqilla.sourceforge.net
More information about the talk
mailing list