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-QHcLZuEGTsvQT0dZR+AlfA@xxxxxxxxxxxxxxxx> 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-9zRdbLeNGsRBDgjK7y7TUQ@xxxxxxxxxxxxxxxx
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-9zRdbLeNGsRBDgjK7y7TUQ@xxxxxxxxxxxxxxxx
http://x-query.com/mailman/listinfo/talk