[XSL-LIST Mailing List Archive Home]
[By Thread]
[By Date]
Re: [xsl] testing for string and number in XSLT 2.0 was Re: [xsl] Test For Numeric Values?
Subject: Re: [xsl] testing for string and number in XSLT 2.0 was Re: [xsl] Test For Numeric Values? From: James Fuller <jim.fuller@xxxxxxxxxxxxxx> Date: Sat, 09 Apr 2005 20:43:06 +0200 |
Michael Kay wrote: >>EX. XML >><?xml version="1.0" encoding="UTF-8"?> >><example> >> <test>132131</test> >></example> >> >> > >I'll assume there is no schema, that is, this is an untyped/unvalidated >document. > > yes, like much of the xml in existence. >> <xsl:variable name="x" select="example/test" as="xs:integer"/> >> <xsl:variable name="y" select="example/test"/> >> >> y variable value(so we know we are selecting it): 132131 >> Test y as string:false >> Test y as integer:false >> x variable value:132131 >> test x as integer: true >> >>not sure if this is what I would expect normally, the issue is related >>to an element if if has no explicitly declared data-type.. >> >> > >I don't know what your expectations are but these results are correct >according to the spec. If you don't validate the input document against a > > >schema, then the "typed value" of its nodes is untypedAtomic. If you test >($y instance of xdt:untypedAtomic) you will get the answer true. >untypedAtomic behaves essentially like XSLT 1.0 - if you use the value where >a string is expected, it's treated as a string, if you use it where an >integer is expected, it's converted to an integer. > > >>it doesnt make much sense to me to *have* to declare something as an >>integer datatype to test if its a value is a number...whats the point? >> >> >> >You need to distinguish "instance of" and "castable as". The "instance of" > > I think I have enough understanding of the two. >operator is useful if you write a function that can accept arguments of >several different types and you want to test which type you have been given >(just like "instanceof" in Java). The "castable as" operator is useful when >you are given untyped data and you want to see whether its lexical form >makes it suitable for casting to a particular type such as xs:integer or >xs:date - which is where this thread started. > > doing y variable value(so we know we are selecting it): <xsl:value-of select="$y"/> Test y as string:<xsl:value-of select="$y castable as xs:string"/> Test y as integer:<xsl:value-of select="$y castable as xs:integer"/> comes up with y variable value(so we know we are selecting it): 3123123 Test y as string:true Test y as integer:true back to my original question, how can I test if a value is a string or integer (with the very real constraint of data not being explicitly typed). not having a go, just think that this is a pretty valid use case. --Jim Fuller
Current Thread |
---|
|
<- Previous | Index | Next -> |
---|---|---|
RE: [xsl] testing for string and nu, Michael Kay | Thread | RE: [xsl] testing for string and nu, Michael Kay |
RE: [xsl] testing for string and nu, Michael Kay | Date | Re: [xsl] testing for string and nu, James Fuller |
Month |