Re: [xsl] [text nodes] Unmatching text nodes wrongly inserted

Subject: Re: [xsl] [text nodes] Unmatching text nodes wrongly inserted
From: "Anton Triest" <anton@xxxxxxxx>
Date: Fri, 24 Sep 2004 10:33:53 +0200
Hi Stefano,

The stylesheet you posted:

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform";
    version="1.0" xmlns:xdm="http://www.aaa.it/consulta/xdmModel";>
    <xsl:template match="xdm:fields">
        <map font-family="Courier" font-size="10pt" height="1" x-unit="in/10" y-unit="in/6">
            <xsl:apply-templates select="xdm:field[@name='CSBFT242']"/>
        </map>
    </xsl:template>
    <xsl:template match="xdm:field[@name='CSBFT242']">
        <label x="20" y="56" width="12">
            <xsl:value-of select="."/>
        </label>
    </xsl:template>
</xsl:stylesheet>

does not contain a <xsl:template match="/"> (matching the document root node).
In such case, the default templates are applied. If you add a match="/" template,
you can just select the elements you need, and no default templates will be called:

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform";
    version="1.0" xmlns:xdm="http://www.aaa.it/consulta/xdmModel";>
    <xsl:template match="/">
        <xsl:apply-templates select="//xdm:fields"/>
    </xsl:template>
    <xsl:template match="xdm:fields">
        <map font-family="Courier" font-size="10pt" height="1" x-unit="in/10" y-unit="in/6">
            <xsl:apply-templates select="xdm:field[@name='CSBFT242']"/>
        </map>
    </xsl:template>
    <xsl:template match="xdm:field">
        <label x="20" y="56" width="12">
            <xsl:value-of select="."/>
        </label>
    </xsl:template>
</xsl:stylesheet>

In real situations it might be better not to use "//xdm:fields", but pass a full path like
"/xdm:documents/xdm:document/xdm:body/xdm:pages/xdm:page/xdm:fields"
because "//" always scans the complete input document. Or even better, use a key:

    <xsl:key name="fields" match="xdm:field" use="@name"/>
    <xsl:template match="/">
        <xsl:apply-templates select="key('fields', 'CSBFT242')"/>
    </xsl:template>

Salute!
Anton

Current Thread