[xslt] possible bug in xsltproc/libxslt
- From: Iosif Fettich <ifettich netsoft ro>
- To: xslt gnome org
- Subject: [xslt] possible bug in xsltproc/libxslt
- Date: Mon, 31 Oct 2005 21:23:02 +0200 (EET)
Hi,
hope to get a clue if I hit a bug or if I'm just doing something
stupid/illegal.
I've attached an .xml file and an .xslt stylesheet.
I tried to simplfy this as much as possible, without loosing the relevance of
the problem.
The output I get by running
$ xsltproc bug.xslt bug.xml
Class 3
Item 3, weight 1, position 1
Item 1, weight 3, position 0
Item 2, weight 2, position 1
isn't sorted as expected, based on the items weight.
It might be that there is no bug whatsoever and I'm just doing something
illegal, however I couldn't so far get any evidence that the construct I'm
using is flawed or not allowed.
I know now that the problem is related to the
<xsl:sort select="/root/items/item[ item_id = @it_id]/@weight"
order="descending"
data-type="number"/>
construct I'm using; the problem disappears if I do not try to select for
sorting an value outside/above of the current node_set, but so far I just
cannot convince me that this would be incorrect or illegal.
Many thanks,
Iosif Fettich
PS. Using Fedora Core 4,
$ rpm -qi libxslt
Name : libxslt Relocations: /usr
Version : 1.1.14 Vendor: Red Hat, Inc.
Release : 2 Build Date: Lu 23 mai 2005 21:30:18
EEST
Install Date: Sî 25 iun 2005 11:51:26 EEST Build Host:
tweety.build.redhat.com
Group : Development/Libraries Source RPM:
libxslt-1.1.14-2.src.rpm
Size : 1857109 License: MIT
Signature : DSA/SHA1, Mi 25 mai 2005 00:42:42 EEST, Key ID b44269d04f2a6fd2
Packager : Red Hat, Inc. <http://bugzilla.redhat.com/bugzilla>
URL : http://xmlsoft.org/XSLT/
Summary : Library providing XSLT support.
Description :
This C library lets you transform XML files into other XML files (or
HTML, text, etc.) using the standard XSLT stylesheet transformation
mechanism. To use it, you need to have a versi<root>
<items>
<item item_id="1" weight="3"/>
<item item_id="2" weight="2"/>
<item item_id="3" weight="1"/>
</items>
<classes>
<class class_id="1" class_name="C1"/>
<class class_id="2" class_name="C2"/>
<class class_id="3" class_name="C3"/>
</classes>
<matches>
<match cl_id="3" it_id="3"/>
<match cl_id="3" it_id="1"/>
<match cl_id="3" it_id="2"/>
</matches>
</root>
<?xml version="1.0" encoding="ISO-8859-1"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:exsl="http://exslt.org/common"
extension-element-prefixes="exsl">
<xsl:output encoding="ISO-8859-1"
method="html"
omit-xml-declaration="yes"
indent="yes"/>
<xsl:template match="/">
<xsl:for-each select="/root/classes/class">
<xsl:variable name="class_id" select="@class_id"/>
<xsl:if test="count( /root/matches/match [ cl_id = $class_id ] ) >= 1">
Class <xsl:value-of select="$class_id"/>
<xsl:call-template name="show_one_class_items">
<xsl:with-param name="class_id" select="$class_id"/>
</xsl:call-template>
</xsl:if>
</xsl:for-each>
</xsl:template>
<xsl:template name="show_one_class_items">
<xsl:param name="class_id"/>
<xsl:for-each select="/root/matches/match[ @cl_id = $class_id]">
<xsl:sort select="/root/items/item[ item_id = @it_id]/@weight"
order="descending"
data-type="number"/>
<xsl:variable name="item_id" select="@it_id"/>
<xsl:variable name="position" select="position() mod 2"/>
<xsl:for-each select="/root/items/item[ @item_id = $item_id ]">
Item <xsl:value-of select="concat( $item_id,
', weight ', @weight,
', position ', $position)"/>
</xsl:for-each>
</xsl:for-each>
</xsl:template>
</xsl:stylesheet>
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]