This is the mail archive of the
xsl-list@mulberrytech.com
mailing list .
insert default node if it doesn't exist
- From: Thomas Olausson <thomas dot olausson at home dot se>
- To: xsl-list at lists dot mulberrytech dot com
- Date: Tue, 10 Sep 2002 02:04:11 +0200
- Subject: [xsl] insert default node if it doesn't exist
- Reply-to: xsl-list at lists dot mulberrytech dot com
I always have trouble with xslt when processing something once:
Ia certain child doesn't exists, I'd like to insert a default value:
Like the one below. The 2nd 'a' should after processing include a <c>0</c> (since it doesn't have it).
before:
<data>
<a>
<b>100</b>
<c>120</c>
</a>
<a>
<b>100</b>
<g>300</g>
</a>
</data>
after:
<data>
<a>
<b>100</b>
<c>120</c>
</a>
<a>
<b>100</b>
<g>300</g>
<c>0</c>
</a>
</data>
I've tried with this XSLT. Problem is that since the match doesn't find <c> for the 2nd both for b and g, I'll get a <c> for everyone of them. How can this be solved?
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>
<xsl:template match="a/*">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
<xsl:if test="not(../c)">
<c>0</c>
</xsl:if>
</xsl:template>
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>
/Thomas
XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list