Subject: RE: [xsl] [XSLT 2.0] Checking that an element's value has the desired datatype? From: "Costello, Roger L." <costello@xxxxxxxxx> Date: Mon, 16 Oct 2006 11:53:50 -0400 |
Excellent! With this: matches(flt:Aircraft/flt:Altitude, '[0-9]+') I can do datatype checking, without using XML Schemas. This will be very handy for Schematron ... /Roger -----Original Message----- From: Michael Kay [mailto:mike@xxxxxxxxxxxx] Sent: Monday, October 16, 2006 11:47 AM To: xsl-list@xxxxxxxxxxxxxxxxxxxxxx Subject: RE: [xsl] [XSLT 2.0] Checking that an element's value has the desired datatype? 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 , Michael Kay | Thread | Re: [xsl] [XSLT 2.0] Checking that , Florent Georges |
[xsl] Encompassing Element extracti, mhbush | Date | Re: [xsl] Rename Some Node and attr, Mukul Gandhi |
Month |