xsl-list
[Top] [All Lists]

insert default node if it doesn't exist

2002-09-09 17:04:11
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



<Prev in Thread] Current Thread [Next in Thread>