Jump to content
IBACK

[XSLT 2.0] How getting the current date ?

Recommended Posts

Hi everybody,

 

I try to implement and to show the current date in my stylesheet, but I obtain this error message during the compilation :

 

ERROR: 'Impossible to compile the stylesheet'
FATAL ERROR: 'Error during the verification of type of expression 'funcall(current-date, [])'.'
:Error during the verification of type of expression 'funcall(current-date, [])'.
This is an extract of my stylesheet :
<?xml version="1.0" encoding="UTF-8"?><xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"	version="2.0">	<xsl:output method="html" indent="yes" />        ... 		<xsl:template name="getMonth">				<xsl:param name="monthNbr" />				<xsl:choose>					<xsl:when test="$monthNbr=1">						Janvier					</xsl:when>					<xsl:when test="$monthNbr=2">						Février					</xsl:when>					<xsl:when test="$monthNbr=3">						Mars					</xsl:when>					<xsl:when test="$monthNbr=4">						Avril					</xsl:when>					<xsl:when test="$monthNbr=5">						Mai					</xsl:when>					<xsl:when test="$monthNbr=6">						Juin					</xsl:when>					<xsl:when test="$monthNbr=7">						Juillet					</xsl:when>					<xsl:when test="$monthNbr=8">						Août					</xsl:when>					<xsl:when test="$monthNbr=9">						Septembre					</xsl:when>					<xsl:when test="$monthNbr=10">						Octobre					</xsl:when>					<xsl:when test="$monthNbr=11">						Novembre					</xsl:when>					<xsl:when test="$monthNbr=12">						Décembre					</xsl:when>				</xsl:choose>		</xsl:template> 		<xsl:template name="date_jour">				<xsl:variable name="currentDate" select="current-date()" /> 				<xsl:variable name="year" select="year-from-date($currentDate)" />				<xsl:variable name="month">					<xsl:call-template name="getMonth">						<xsl:with-param name="monthNbr"							select="month-from-date($currentDate)" />					</xsl:call-template>				</xsl:variable>				<xsl:variable name="day" select="day-from-date($currentDate)" />				<xsl:value-of select="format-number($day,'00')" />				<xsl:text> </xsl:text>				<xsl:value-of select="$month" />				<xsl:text> </xsl:text>				<xsl:value-of select="$year" />		</xsl:template>... </xsl:stylesheet>

Any ideas ?

 

Thank you in advance

 

Fabrice

 

 

Share this post


Link to post
Share on other sites

"Which XSLT 2.0 processor do you use ?"

 

In fact, none. :glare:

 

"Don't you get some more detailed information like the line number in your code where the error occurs?"

 

This is my code :

package test.xsl;import javax.xml.transform.OutputKeys;import javax.xml.transform.Result;import javax.xml.transform.Source;import javax.xml.transform.Transformer;import javax.xml.transform.TransformerFactory;import javax.xml.transform.stream.StreamResult;import javax.xml.transform.stream.StreamSource;public class XMLwithXSLT {	public static void main(String[] args) throws Exception {		Source source = new StreamSource("src/test/xsl/data.xml");		Source xsl = new StreamSource("src/test/xsl/_dt.xsl");		Result result = new StreamResult(System.out);		TransformerFactory factory = TransformerFactory.newInstance();		Transformer transformer = factory.newTransformer(xsl);		transformer.setOutputProperty(OutputKeys.INDENT, "yes");		transformer.transform(source, result);	}}

This is the complete error :

 

ERROR: 'Impossible de compiler la feuille de style'
FATAL ERROR: 'Erreur lors de la vérification du type de l'expression 'funcall(current-date, [])'.'
:Erreur lors de la vérification du type de l'expression 'funcall(current-date, [])'.
Exception in thread "main" javax.xml.transform.TransformerConfigurationException: Erreur lors de la vérification du type de l'expression 'funcall(current-date, [])'.
at com.sun.org.apache.xalan.internal.xsltc.trax.TransformerFactoryImpl.newTemplates(TransformerFactoryImpl.java:992)
at com.sun.org.apache.xalan.internal.xsltc.trax.TransformerFactoryImpl.newTransformer(TransformerFactoryImpl.java:766)
at test.xsl.XMLwithXSLT.main(XMLwithXSLT.java:18)
Caused by: Erreur lors de la vérification du type de l'expression 'funcall(current-date, [])'.
at com.sun.org.apache.xalan.internal.xsltc.compiler.FunctionCall.typeCheckStandard(FunctionCall.java:437)
at com.sun.org.apache.xalan.internal.xsltc.compiler.FunctionCall.typeCheck(FunctionCall.java:346)
at com.sun.org.apache.xalan.internal.xsltc.compiler.Variable.typeCheck(Variable.java:101)
at com.sun.org.apache.xalan.internal.xsltc.compiler.SyntaxTreeNode.typeCheckContents(SyntaxTreeNode.java:493)
at com.sun.org.apache.xalan.internal.xsltc.compiler.Template.typeCheck(Template.java:295)
at com.sun.org.apache.xalan.internal.xsltc.compiler.SyntaxTreeNode.typeCheckContents(SyntaxTreeNode.java:493)
at com.sun.org.apache.xalan.internal.xsltc.compiler.LiteralElement.typeCheck(LiteralElement.java:201)
at com.sun.org.apache.xalan.internal.xsltc.compiler.SyntaxTreeNode.typeCheckContents(SyntaxTreeNode.java:493)
at com.sun.org.apache.xalan.internal.xsltc.compiler.Template.typeCheck(Template.java:295)
at com.sun.org.apache.xalan.internal.xsltc.compiler.SyntaxTreeNode.typeCheckContents(SyntaxTreeNode.java:493)
at com.sun.org.apache.xalan.internal.xsltc.compiler.Stylesheet.typeCheck(Stylesheet.java:657)
at com.sun.org.apache.xalan.internal.xsltc.compiler.Parser.createAST(Parser.java:411)
at com.sun.org.apache.xalan.internal.xsltc.compiler.XSLTC.compile(XSLTC.java:427)
at com.sun.org.apache.xalan.internal.xsltc.compiler.XSLTC.compile(XSLTC.java:512)
at com.sun.org.apache.xalan.internal.xsltc.trax.TransformerFactoryImpl.newTemplates(TransformerFactoryImpl.java:951)
... 2 more
---------
Erreur lors de la vérification du type de l'expression 'funcall(current-date, [])'.
at com.sun.org.apache.xalan.internal.xsltc.compiler.FunctionCall.typeCheckStandard(FunctionCall.java:437)
at com.sun.org.apache.xalan.internal.xsltc.compiler.FunctionCall.typeCheck(FunctionCall.java:346)
at com.sun.org.apache.xalan.internal.xsltc.compiler.Variable.typeCheck(Variable.java:101)
at com.sun.org.apache.xalan.internal.xsltc.compiler.SyntaxTreeNode.typeCheckContents(SyntaxTreeNode.java:493)
at com.sun.org.apache.xalan.internal.xsltc.compiler.Template.typeCheck(Template.java:295)
at com.sun.org.apache.xalan.internal.xsltc.compiler.SyntaxTreeNode.typeCheckContents(SyntaxTreeNode.java:493)
at com.sun.org.apache.xalan.internal.xsltc.compiler.LiteralElement.typeCheck(LiteralElement.java:201)
at com.sun.org.apache.xalan.internal.xsltc.compiler.SyntaxTreeNode.typeCheckContents(SyntaxTreeNode.java:493)
at com.sun.org.apache.xalan.internal.xsltc.compiler.Template.typeCheck(Template.java:295)
at com.sun.org.apache.xalan.internal.xsltc.compiler.SyntaxTreeNode.typeCheckContents(SyntaxTreeNode.java:493)
at com.sun.org.apache.xalan.internal.xsltc.compiler.Stylesheet.typeCheck(Stylesheet.java:657)
at com.sun.org.apache.xalan.internal.xsltc.compiler.Parser.createAST(Parser.java:411)
at com.sun.org.apache.xalan.internal.xsltc.compiler.XSLTC.compile(XSLTC.java:427)
at com.sun.org.apache.xalan.internal.xsltc.compiler.XSLTC.compile(XSLTC.java:512)
at com.sun.org.apache.xalan.internal.xsltc.trax.TransformerFactoryImpl.newTemplates(TransformerFactoryImpl.java:951)
at com.sun.org.apache.xalan.internal.xsltc.trax.TransformerFactoryImpl.newTransformer(TransformerFactoryImpl.java:766)
at test.xsl.XMLwithXSLT.main(XMLwithXSLT.java:18)

Share this post


Link to post
Share on other sites

My application is a commercial JavaFX application.

 

I prefer to choice a free processor.. SAXON requires a particular license...

 

Do you know (for Java) a free processor which supports XSLT / XPath 2.0 ?

Share this post


Link to post
Share on other sites

I only know Saxon 9 which comes in various editions, the open source Home Edition HE should suffice for your needs to use XSLT and XPath 2.0, at least in terms of support of the specification. There are also the commercial Personal Edition PE and the Enterprise Edition EE for which one has to buy a license.

I don't know of any other Java XSLT 2.0 implementation, other than that IBM Websphere package I already mentioned.

Some things you want to do like getting the current date could be done with Xalan by making use of parameters or by making use of extension functions calling into Java.

Share this post


Link to post
Share on other sites

ok i modified my stylesheet :

<?xml version="1.0" encoding="UTF-8"?><xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"	xmlns:fo="http://www.w3.org/1999/XSL/format" xmlns:cal="xalan//java.util.GregorianCalendar"	version="2.0">	<xsl:output method="html" indent="yes" />...			<xsl:template name="getMonth">				<xsl:param name="monthNbr" />				<xsl:choose>					<xsl:when test="$monthNbr=1">						Janvier					</xsl:when>					<xsl:when test="$monthNbr=2">						Février					</xsl:when>					<xsl:when test="$monthNbr=3">						Mars					</xsl:when>					<xsl:when test="$monthNbr=4">						Avril					</xsl:when>					<xsl:when test="$monthNbr=5">						Mai					</xsl:when>					<xsl:when test="$monthNbr=6">						Juin					</xsl:when>					<xsl:when test="$monthNbr=7">						Juillet					</xsl:when>					<xsl:when test="$monthNbr=8">						Août					</xsl:when>					<xsl:when test="$monthNbr=9">						Septembre					</xsl:when>					<xsl:when test="$monthNbr=10">						Octobre					</xsl:when>					<xsl:when test="$monthNbr=11">						Novembre					</xsl:when>					<xsl:when test="$monthNbr=12">						Décembre					</xsl:when>				</xsl:choose>			</xsl:template>			<xsl:template name="getCurrentDate">				<xsl:variable name="calendar" select="cal:new()" />				<xsl:variable name="day" select="cal:get($calendar,5)" />				<xsl:variable name="month">					<xsl:call-template name="getMonth">						<xsl:with-param name="monthNbr" select="cal:get($calendar,2) + 1" />					</xsl:call-template>				</xsl:variable>				<xsl:variable name="year" select="cal:get($calendar,1)" />				<xsl:value-of select="$day" />				<xsl:text>/</xsl:text>				<xsl:value-of select="$month" />				<xsl:text>/</xsl:text>				<xsl:value-of select="$year" />			</xsl:template>			<xsl:variable name="currentDate">				<xsl:call-template name="getCurrentDate"></xsl:call-template>			</xsl:variable>		</div>

I obtain a new error message :

 

Exception in thread "main" java.lang.VerifyError: (class: _dt, method: template$dot$1 signature: (Lcom/sun/org/apache/xalan/internal/xsltc/DOM;Lcom/sun/org/apache/xml/internal/dtm/DTMAxisIterator;Lcom/sun/org/apache/xml/internal/serializer/SerializationHandler;I)V) Accessing value from uninitialized register 5
at java.lang.Class.getDeclaredConstructors0(Native Method)
at java.lang.Class.privateGetDeclaredConstructors(Class.java:2664)
at java.lang.Class.getConstructor0(Class.java:3068)
at java.lang.Class.newInstance(Class.java:407)
at com.sun.org.apache.xalan.internal.xsltc.trax.TemplatesImpl.getTransletInstance(TemplatesImpl.java:387)
at com.sun.org.apache.xalan.internal.xsltc.trax.TemplatesImpl.newTransformer(TemplatesImpl.java:418)
at com.sun.org.apache.xalan.internal.xsltc.trax.TransformerFactoryImpl.newTransformer(TransformerFactoryImpl.java:767)
at test.xsl.XMLwithXSLT.main(XMLwithXSLT.java:18)
Any ideas ?

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...

×
×
  • Create New...