xsl-list
[Top] [All Lists]

RE: Computed Location Predicate

2003-01-02 09:17:29
With Saxon 6.5.2, I tried many variations of the predicate 
before final success with the following bit of the code, 
which is within a for-each selecting 
"/xs:schema/xs:complexType[<pulls the target
complexType>]/xs:restriction".

            <xsl:variable name="elementValue">
                <xsl:choose>
                    <xsl:when test="xs:enumeration">
                        <xsl:variable name="enumPtr">
                            <xsl:value-of
select="string-length($allValues) mod count(xs:enumeration) + 1"/>
                        </xsl:variable>

An <xsl:variable> containing a single <xsl:value-of> is almost
invariably bad coding. Write:

<xsl:variable name="enumPtr" 
  select="string-length($allValues) mod count(xs:enumeration) + 1"/>

That way you get a value of type number, not of type
result-tree-fragment.


During the course of debugging, I used the the following without
success:

            <xsl:variable name="elementValue">
                <xsl:choose>
                    <xsl:when test="xs:enumeration">
                        <xsl:value-of
select="xs:enumeration[number(string-length($allValues) mod
count(xs:enumeration) + 1)]/@value"/>
                    </xsl:when>
                        . 

I can't see any reason why this shouldn't work, it's equivalent to your
working example. If you can supply a complete stylesheet and source
document that shows the problem, I'll take a look at it for you.

The number() function call here is redundant, its argument is already a
number; but that shouldn't stop it working.

Michael Kay
Software AG
home: Michael(_dot_)H(_dot_)Kay(_at_)ntlworld(_dot_)com
work: Michael(_dot_)Kay(_at_)softwareag(_dot_)com 




I understand that my problems with (many) earlier versions 
were due to the processor's inability to distinguish the 
predicate as a number rather than a non-number and therefore 
a boolean. But why does the processor differentiate between 
casting a variable to a number, which works, and casting an 
expression to a number, which does not work?

Any suggestions?



Richard Patchet
bTrade, Inc.
2324 Gateway Drive
Irving, TX 75063
972-5802981
www.bTrade.com

 XSL-List info and archive:  http://www.mulberrytech.com/xsl/xsl-list




 XSL-List info and archive:  http://www.mulberrytech.com/xsl/xsl-list



<Prev in Thread] Current Thread [Next in Thread>