Re: [xsl] "*|@*|text()" vs. "node()"

Subject: Re: [xsl] "*|@*|text()" vs. "node()"
From: Jörg Heinicke <joerg.heinicke@xxxxxx>
Date: Thu, 04 Oct 2001 17:44:36 +0200
David Carlisle wrote:

But when will <xsl:template match="@href"> be selected?


A template is only executed if its match attribute matches a node in the current node list (and has highest priority/import precedence)

Since attributes are not in the default selection of apply-templates
this template will only fire if you explictly include the attribute axis
in some apply-templates. But I thought you said that you were not
selecting attributes when you got the error.

As it uses xsl:attribute, then it should generate a runtime error if it
is not immediately after a new element node has been started in the
result tree. But if templates are not applied to attributes, then this
can never happen.


There are a few more templates which apply @href, but they all create a new element in the result tree. As I said the stylesheet worked before changing the first template to "node()". So there must be an "auto-apply". I really tested it with <xsl:apply-templates select="node()"/> in the first template.

You can try it out with Xalan.

Not without a full (small) example stylesheet and source doc, I can't.


This will work with every xml and xsl. You only need an <xsl:attribute> without a new element.


<?xml version="1.0"?>
<root/>




<?xml version="1.0"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform";>
   <xsl:template match="root">
       <xsl:attribute name="test">test</xsl:attribute>
   </xsl:template>
</xsl:stylesheet>


I tried it with the current version 2.2.D11.


Joerg

--

System Development
VIRBUS AG
Fon +49(0)341-979-7435
Fax +49(0)341-979-7409
joerg.heinicke@xxxxxxxxx
www.virbus.de


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



Current Thread