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[(_at_)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/
--~------------------------------------------------------------------
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>
--~--