[jdom-interest] Using xquery-operators in XSLT's

Holmes, Charles V. cholmes at mitre.org
Wed Jun 20 06:42:02 PDT 2007

Given a startTime (dateTime), endTime (dateTime) and intervals
(integer), I'm attempting to come up with dateTimes evenly spaced
between the startTime and endTime.  It seems that I need to use
xquery-operators to do this since XSLT doesn't seem to provide the kind
of date manipulation I need.  When I try to run this, I get an error
(also below). 
Am I going about this the correct way, or is there a better way to do
this?  Does JDOM provide support for xquery-operators in XSLT?  If not,
is there another way to get these time intervals?  Or should I be using
another processor for this?  On a slightly related node, position()
works, but fn:position() doesn't.  Is this a XSLT 1.0 vs 2.0 thing?
ERROR:  'The first argument to the non-static Java function
'subtractDateTimes' is not a valid object reference.'
FATAL ERROR:  'Could not compile stylesheet'
org.jdom.transform.XSLTransformException: Could not construct
XSLTransformer: Could not compile stylesheet
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0"
<xsl:output method="xml" />
<xsl:variable name="startTime" select="sgp4:SGP4Set/sgp4:startDateTime"
<xsl:variable name="endTime"   select="sgp4:SGP4Set/sgp4:stopDateTime"
<xsl:variable name="steps"     select="sgp4:SGP4Set/sgp4:steps" />
<xsl:template match="/">
  <xsl:apply-templates />
<xsl:template match="sgp4:timeSeries">
<xsl:template match="sgp4:SGP4Set/sgp4:timeSeries/sgp4:latLonXYZ">
  <xsl:value-of select="$startTime + (position() *
(op:subtract-dateTimes($startTime, $endTime) div steps))"/>
I'm then trying to transform it with the following code:
  String str = "<SGP4Set>" + 
  "<startDateTime>2007-06-14T15:21:10.666+00:00</startDateTime>" + 
  "<stopDateTime>2007-06-15T15:21:10.666+00:00</stopDateTime>" + 
  "<steps>3</steps>" + 
  "<elsetLine1>1 25544U 98067A   07164.33827071 -.00073317  00000-0
-41936-3 0  3835</elsetLine1>" + 
  "<elsetLine2>2 25544 051.6334 123.8003 0008065 317.7457 198.0340
15.78097880490162</elsetLine2>" + 
  "<timeSeries>" + 
    "<latLonXYZ lat=\"-4.464837391096287\" lon=\"340.6854284795686\"
height=\"333.1668901789984\" x=\"-2673.3476456175044\"
y=\"6133.803881468676\" z=\"-519.1427930784305\"
time=\"1874.1666666665114\"/>" + 
    "<latLonXYZ lat=\"4.510324008580091\" lon=\"347.0371991370784\"
height=\"332.65914429961356\" x=\"-3407.888183523746\"
y=\"5757.110331891201\" z=\"524.3810905059737\"
time=\"1877.0466666665116\"/>" + 
    "<latLonXYZ lat=\"13.413484560305426\" lon=\"353.56508317710467\"
height=\"333.1856535368585\" x=\"-4008.464009082425\"
y=\"5154.103666587921\" z=\"1547.231195854609\"
time=\"1879.9266666665117\"/>" + 
  "</timeSeries>" +
   // setup our transformer 
   SAXBuilder builder = new SAXBuilder();
   XSLTransformer transformer = new XSLTransformer("SGP4ToKML.xslt");
   // setup our document to transform
   StringReader sr = new StringReader(str);
   Document doc = builder.build(sr);
   // save the transformed document in doc2
   Document doc2 = transformer.transform(doc);

   String result = new XMLOutputter().outputString(doc);
   result = new XMLOutputter().outputString(doc2);
   XmlObject obj = XmlObject.Factory.parse(result);
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://www.jdom.org/pipermail/jdom-interest/attachments/20070620/46ec40b2/attachment.htm

More information about the jdom-interest mailing list