This is the mail archive of the xsl-list@mulberrytech.com mailing list .


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

RE: insert default node if it doesn't exist


You need to handle this when processing the <a> element, not when
processing its children, otherwise, as you point out, you will insert
the default <c> element once for each child.

<xsl:template match="a">
  <xsl:apply-templates select="*"/>
  <xsl:if test="not(c)"><c>0</c></xsl:if>
</xsl:template>

Michael Kay
Software AG
home: Michael.H.Kay@ntlworld.com
work: Michael.Kay@softwareag.com 

> -----Original Message-----
> From: owner-xsl-list@lists.mulberrytech.com 
> [mailto:owner-xsl-list@lists.mulberrytech.com] On Behalf Of 
> Thomas Olausson
> Sent: 10 September 2002 01:04
> To: xsl-list@lists.mulberrytech.com
> Subject: [xsl] insert default node if it doesn't exist
> 
> 
> 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
> 


 XSL-List info and archive:  http://www.mulberrytech.com/xsl/xsl-list


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]