|
[XQuery Talk Mailing List Archive Home] [By Date] [By Thread] [By Subject] [By Author] [Recent Entries] [Reply To This Message] replacing a node in in-memory XMLJohn Snelson john.snelson at oracle.comTue 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 <http://x-query.com/mailman/listinfo/talk> 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 >>> _______________________________________________ >>> http://x-query.com/mailman/listinfo/talk >>> 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 >> _______________________________________________ >> http://x-query.com/mailman/listinfo/talk >> 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
|
Purchase Stylus Studio Online Today!Purchasing Stylus Studio from our online shop is Easy, Secure and Value Priced! Download The World's Best XML IDE!Accelerate XML development with our award-winning XML IDE - Download a free trial today! Subscribe in XML format
|






