[XSL-LIST Mailing List Archive Home] [By Thread] [By Date]

[xsl] insert default node if it doesn't exist


Subject: [xsl] insert default node if it doesn't exist
From: Thomas Olausson <thomas.olausson@xxxxxxx>
Date: Tue, 10 Sep 2002 02:04:11 +0200

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



Current Thread
Keywords