Subject: RE: [xsl] [XSLT 2.0] Checking that an element's value has the desired datatype? From: "Michael Kay" <mike@xxxxxxxxxxxx> Date: Mon, 16 Oct 2006 16:47:08 +0100 |
If there's no schema, then the Altitude element is untyped, so applying data() to it gives an instance of xs:untypedAtomic, not an integer. The expression you want is flt:Aircraft/flt:Altitude castable as xsd:integer which tests not whether the value is an integer, but whether conversion to an integer would succeed. You could also test this with a regular expression matches(flt:Aircraft/flt:Altitude, '[0-9]+') (which in Saxon is probably faster, as "castable as" will tend to throw and then catch a Java exception in the "false" path, and throwing exceptions is very inefficient in Java). Michael Kay http://www.saxonica.com/ > -----Original Message----- > From: Costello, Roger L. [mailto:costello@xxxxxxxxx] > Sent: 16 October 2006 16:34 > To: xsl-list@xxxxxxxxxxxxxxxxxxxxxx > Subject: [xsl] [XSLT 2.0] Checking that an element's value > has the desired datatype? > > Hi Folks, > > Below is an XML document containing information about the > Altitude of an Aircraft. > > I have written a stylesheet to check the Altitude's value, to > see if it is an integer. Below is my stylesheet. > > My stylesheet uses this statement: > > <xsl:value-of select="data(flt:Aircraft/flt:Altitude) > instance of xsd:integer"/> > > The output I get is: "false" > > (The output I seek is "true", as the Altitude element does > have an integer value.) > > Can someone tell me the correct way to do this? > > Thanks! /Roger > > -------------------------------------------------------------- > --------- > ---------- > <?xml version="1.0"?> > <Flight xmlns="http://www.aviation.org"> > <Aircraft> > <Altitude>3300</Altitude> > </Aircraft> > </Flight> > -------------------------------------------------------------- > --------- > ---------- > <?xml version="1.0"?> > <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" > xmlns:flt="http://www.aviation.org" > xmlns:xsd="http://www.w3.org/2001/XMLSchema" > version="2.0"> > > <xsl:output method="html"/> > > <xsl:template match="flt:Flight"> > <html> > <body> > Check that the aircraft's altitude is an integer: > <xsl:value-of select="data(flt:Aircraft/flt:Altitude) > instance of xsd:integer"/> > </body> > </html> > </xsl:template> > > </xsl:stylesheet>
Current Thread |
---|
|
<- Previous | Index | Next -> |
---|---|---|
Re: [xsl] [XSLT 2.0] Checking that , David Carlisle | Thread | RE: [xsl] [XSLT 2.0] Checking that , Costello, Roger L. |
Re: [xsl] Rename Some Node and attr, Joe Fawcett | Date | [xsl] Encompassing Element extracti, mhbush |
Month |