xsl-list
[Top] [All Lists]

RE: How do you apply templates ONLY to the direct children of an element/node?

2003-08-26 07:07:01
Hi:

Try this <xsl:apply-templates select="node()[not(self::*)]"/>
Just will select the node...

I wish this help


Firas darweesh

-----Original Message-----
From: owner-xsl-list(_at_)lists(_dot_)mulberrytech(_dot_)com
[mailto:owner-xsl-list(_at_)lists(_dot_)mulberrytech(_dot_)com] On Behalf Of 
Borislav
Stoyanov
Sent: Tuesday, August 26, 2003 5:38 PM
To: 'xsl-list(_at_)lists(_dot_)mulberrytech(_dot_)com'
Subject: RE: [xsl] How do you apply templates ONLY to the direct
children of an element/node?

How do you apply templates ONLY to the direct children of an 
element/node,
supposed you dont know their name?

  <xsl:apply-templates select="*"/>

which is an abbreviation of

  <xsl:apply-templates select="child::*"/>

What if there is no 
matching template,
why are grandchildren also matched?

Because the build-in default template is used, which in this case is

  <xsl:template match="* | /">
    <xsl:apply-templates select="node()"/>
  </xsl:template>


Actually I know this but it is NOT ONLY for the DIRECT children but also
for
their grandchildren and so on IF there is no specified matching template
for
<unknown-element>. My idea is that if the xsl-transformer finds an
element
for which it is not defined a template it just skips it and don't go
into
this element's children? 

Let 
<element-1>
    <unknown-element>
       ....
    </unknown-element>
<element-1>
be the xml file to be transformed.

Now you got the following transforming rule:
<xsl:template match="element-1">
    <xsl:apply-templates select="*"/>
</xsl:template>

What I expect is that if an xsl <unknown-element> template rule is
not
available nothing should happen. However I get apply-templates on
the 
elements contained in <unknown-element>...</unknown-element>. Why
does
it 
happen and how can I achieve to apply the templates ONLY to the
direct 
children and avoid the implied apply-template rules to the
grandchildren
and so on?

Override the default rule with e.g.

  <xsl:template match="*"/>

Thats not that simple if you have 200 other templates/cases somewhere
else.

Best regards,

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


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



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