RE: [xsl] Root node with attributes

Subject: RE: [xsl] Root node with attributes
From: "Michael Kay" <mike@xxxxxxxxxxxx>
Date: Thu, 18 Oct 2007 09:47:41 +0100
match="String" matches an element whose local name is "String" and whose
namespace URI is "". By adding
xmlns="http://nxtassembler.sourceforge.net/NXT/AsXML.xsd"; to your outermost
element (not the root node!) you have placed all your elements in namespace
"http://nxtassembler.sourceforge.net/NXT/AsXML.xsd";, so match="String" will
no longer match.

In XSLT 2.0 you can add 

xpath-default-namespace="http://nxtassembler.sourceforge.net/NXT/AsXML.xsd";

to your xsl:stylesheet element so that unprefixed names like String are
interpreted as being in that namespace.

Michael Kay
http://www.saxonica.com/  

> -----Original Message-----
> From: Matteo Valdina [mailto:zanfire@xxxxxxxxx] 
> Sent: 18 October 2007 08:53
> To: xsl-list@xxxxxxxxxxxxxxxxxxxxxx
> Subject: [xsl] Root node with attributes
> 
> Hello,
> 
> I'm tring to understand where is my error and a solution for 
> this problem:
> When the root node conatins attributes the templates are not 
> applied, If the root node don't contain the attributes the 
> templates are applied.
> I didn't understand wath is the right way to apply a template 
> in a root node with attributes.
> 
> Any suggestion are welcome.
> 
> Thanks and sorry for my english
> 
> Matteo Valdina
> 
> Program used: saxon 8
> 
> Stylesheet
> 
> <?xml version="1.0" encoding="UTF-8"?>
> <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform";
>      version="2.0">
> 
>      <xsl:output method="xml" />
> 
>       <xsl:template match="*|/">
>              <xsl:copy>
>                      <xsl:copy-of select="@*"/>
>                      <xsl:apply-templates />
>              </xsl:copy>
>      </xsl:template>
> 
> 
>       <!-- Transform a string to a Array -->
>      <xsl:template match="String">
>              <xsl:message>Convert String</xsl:message>
>              <Array name="{@name}">
>                      <xsl:for-each 
> select="string-to-codepoints(@value)">
>                              <ArrayData type="UBYTE" value="{.}"/>
>                      </xsl:for-each>
>                      <ArrayData type="UBYTE" value="0"/>
>              </Array>
>      </xsl:template>
> </xsl:stylesheet>
> 
> Input file:
> 
> <?xml version="1.0" encoding="UTF-8"?>
> <Assembly xmlns="http://nxtassembler.sourceforge.net/NXT/AsXML.xsd";>
>      <Dataspace>
>              <Data name="a" type="ULONG" value="1"/>
>              <String name="ciao" value="Hello!" />
>      </Dataspace>
> </Assembly>
> 
> Te aspected result is:
> 
> <?xml version="1.0" encoding="UTF-8"?>
> <Assembly xmlns="http://nxtassembler.sourceforge.net/NXT/AsXML.xsd";>
>      <Dataspace>
>              <Data name="a" type="ULONG" value="1"/>
>              <Array name="ciao"><ArrayData type="UBYTE" 
> value="72"/><ArrayData type="UBYTE" value="101"/><ArrayData 
> type="UBYTE"
> value="108"/><ArrayData type="UBYTE" value="108"/><ArrayData 
> type="UBYTE" value="111"/><ArrayData type="UBYTE"
> value="33"/><ArrayData type="UBYTE" value="0"/></Array>
>      </Dataspace>
> </Assembly>

Current Thread