xsl-list
[Top] [All Lists]

re: [xsl] creating attribute for xsl:element in applied template

2008-07-21 05:59:00
You may want to move some templates into a different mode.
In fact all except 
  <xsl:template match="/xs:schema/xs:element[(_at_)name]">


Thus 

<xsl:template match="/xs:schema/xs:attribute[(_at_)name]" >

won't be matched by default.

--
Vladimir Nesterovsky
http://www.nesterovsky-bros.com/


What I try to do now is to generate a sample XML file with XSLT. Therefore 
I first create an xsl:element and then apply-templates on every 
child-node. When some sub-structure happens to contain a xs:attribute, I'd 
like to assign that attribute to the created xsl:element. This is not 
possible, because the creation of xsl:attribute takes place in another 
template than the creation of the xsl:element.

The XSLT I came up with so far:

<xsl:template match="xs:element[(_at_)ref]" >
        <xsl:apply-templates select="/xs:schema/xs:element[(_at_)name = 
current()/@ref]" />
</xsl:template>

<xsl:template match="/xs:schema/xs:element[(_at_)name]" >
        <xsl:element name="{(_at_)name}">
                <xsl:apply-templates />
        </xsl:element>
</xsl:template>

<xsl:template match="xs:complexType" >
        <xsl:apply-templates select="xs:attribute" />
        <xsl:apply-templates select="*[not(self::xs:attribute)]" />
</xsl:template>

<xsl:template match="xs:attribute[(_at_)ref]" >
        <xsl:apply-templates select="/xs:schema/xs:attribute[(_at_)name = 
current()/@ref]" />
</xsl:template>

<xsl:template match="/xs:schema/xs:attribute[(_at_)name]" >
        <xsl:attribute name="{(_at_)name}">
                <xsl:value-of select="@type" />
        </xsl:attribute>
</xsl:template>

Saxon sais: "Cannot write an attribute node when no element start tag is 
open"

Is there no other way to accomplish this task than to create all 
attribute-nodes directly in the "xs:element[(_at_)name]" - template? Would a 
switch to XSLT 2.0 change something?





--~------------------------------------------------------------------
XSL-List info and archive:  http://www.mulberrytech.com/xsl/xsl-list
To unsubscribe, go to: http://lists.mulberrytech.com/xsl-list/
or e-mail: <mailto:xsl-list-unsubscribe(_at_)lists(_dot_)mulberrytech(_dot_)com>
--~--