Subject: Re: [xsl] output modified branch - best practice From: Martin Honnen <Martin.Honnen@xxxxxx> Date: Sun, 20 Jun 2010 17:29:05 +0200 |
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="2.0"> <xsl:output method="xml" encoding="UTF-8"/> <xsl:template match="/root/base/data"> <xsl:copy> <xsl:apply-templates/> </xsl:copy> </xsl:template> <xsl:template match="/root/base/data/*"> <xsl:variable name="var.update" select="/root/update/data/*[name() = current()/name()]"/> <xsl:choose> <xsl:when test="exists($var.update)"> <xsl:copy-of select="$var.update"/> </xsl:when> <xsl:otherwise> <xsl:copy-of select="."/> </xsl:otherwise> </xsl:choose> </xsl:template> <xsl:template match="text()"/> </xsl:stylesheet>
output:
<data> <first>John</first> <last>Doe</last> <dob>1977-12-20</dob> <zip>90210</zip> <phone>(555) 229 8811</phone> <mobile/> <email>john@xxxxxxxxxx</email> </data>
So base/data and update/data are merged. Each element in base/data is copied unless the same element exists in update/data; then it will be overwritten.
Since I just want the modified base/data branch as output I have to get rid of whatever the built-in template rules produces. After some research I found that <xsl:template match="text()"/> is the easiest solution. But in one post the author said that this was not such a good idea. Unfortunately I did not bookmark it.
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="2.0"> <xsl:output method="xml" encoding="UTF-8" indent="yes"/> <xsl:strip-space elements="*"/>
<xsl:template match="/"> <xsl:apply-templates select="root/base/data"/> </xsl:template>
<xsl:template match="/root/base/data"> <xsl:copy> <xsl:apply-templates/> </xsl:copy> </xsl:template>
<xsl:template match="/root/base/data/*"> <xsl:variable name="var.update" select="key('k1', node-name(.))"/> <xsl:choose> <xsl:when test="exists($var.update)"> <xsl:copy-of select="$var.update"/> </xsl:when> <xsl:otherwise> <xsl:copy-of select="."/> </xsl:otherwise> </xsl:choose> </xsl:template>
Martin Honnen http://msmvps.com/blogs/martin_honnen/
Current Thread |
---|
|
<- Previous | Index | Next -> |
---|---|---|
[xsl] output modified branch - best, Heiko Niemann | Thread | Re: [xsl] output modified branch - , Wendell Piez |
[xsl] output modified branch - best, Heiko Niemann | Date | Re: [xsl] XML tags as map keys and , Wendell Piez |
Month |