[xsl] An xsl:number problem

Subject: [xsl] An xsl:number problem
From: "Michael Kay" <mike@xxxxxxxxxxxx>
Date: Thu, 10 Jul 2008 09:57:25 +0100
I've raised a bug report against the spec on this one, but I would be
interested to know how various processors handle it. Please try it and
report the results. The bug report is at 

http://www.w3.org/Bugs/Public/show_bug.cgi?id=5849

Source document:

<?xml version="1.0"?>
<doc>
  <a mark="true"/>
  <a/>
  <a/>
  <a/>
  <a mark="true"/>
  <a/>
  <a/>
  <a/>   
</doc>

Stylesheet:

<?xml version="1.0"?> 
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform";
version="2.0">
<xsl:output indent="yes"/>

<xsl:template match="*">
  <xsl:copy>
    <xsl:copy-of select="@*"/>
    <xsl:attribute name="nr">
      <xsl:number from="a[@mark='true']" count="a" level="any"/>
    </xsl:attribute>
    <xsl:apply-templates/>
  </xsl:copy>
</xsl:template>
 
</xsl:stylesheet>

The output of Saxon 9.1 and other recent releases is clearly wrong, and is
being fixed by a patch. After correction, the output is still strange, but I
believe it is correct according to the spec:

<?xml version="1.0" encoding="UTF-8"?>
<doc nr="">
  <a mark="true" nr=""/>
  <a nr="2"/>
  <a nr="3"/>
  <a nr="4"/>
  <a mark="true" nr="5"/>
  <a nr="2"/>
  <a nr="3"/>
  <a nr="4"/>   
</doc>

This is the Saxon 6.5.5 output:

<?xml version="1.0" encoding="utf-8"?>
<doc nr="">  
   <a mark="true" nr="1"/>  
   <a nr="1"/>  
   <a nr="2"/> 
   <a nr="3"/  
   <a mark="true" nr="4"/>  
   <a nr="1"/>  
   <a nr="2"/> 
   <a nr="3"/>   
</doc>

The 1.0 spec is so terse that it's quite hard to decide whether this is
correct or not, but it's certainly not intuitive.

I would be interested to know what other XSLT 1.0 or 2.0 processors do with
this one.

I think the intuitively correct result is:

<?xml version="1.0" encoding="UTF-8"?>
<doc nr="">
  <a mark="true" nr="1"/>
  <a nr="2"/>
  <a nr="3"/>
  <a nr="4"/>
  <a mark="true" nr="1"/>
  <a nr="2"/>
  <a nr="3"/>
  <a nr="4"/>   
</doc>

Do you agree?

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

Current Thread