![]() |
![]() | ![]() | ![]() | Altova Mailing List Archives>Archive Index >comp.text.xml Archive Home >Recent entries >Thread Prev - Conditional call-template -broken in 2.6 [Thread Next] Re: Conditional call-template -broken in 2.6To: NULL Date: 4/4/2005 4:04:00 PM terry.jeske@g... wrote: : Hello, : In xalan 2.41 we were able to conditionally call a template. This : appears broken in 2.6. I did glance at the call-template specfications : but did not see anything that would point to this being a feature or a : change to follow a standard. The problem is that if the called : template is not included in xslt pass, I get: : javax.xml.transform.TransformerException: ElemTemplateElement error: : "your missing template name here". : We are upgrading our app to java 1.5, and have made extensive use of : this type of call which allow us to have leverage common code for : presentation and admin pages. Below is a simplified code snipet. If it : runs for you, make sure you check your xalan version by running java : org.apache.xalan.Version. : Any insight into why this is happening would be most appreciated. : <?xml version="1.0" encoding="ISO-8859-1"?> : <xsl:stylesheet version="1.0" : xmlns:xsl="http://www.w3.org/1999/XSL/Transform" : xmlns="http://www.w3.org/1999/xhtml"> : <xsl:output method="xml" : media-type="text/html" : doctype-public="-//W3C//DTD XHTML 1.0 Strict//EN" : doctype-system="DTD/xhtml1-strict.dtd" : encoding="ISO-8859-1" /> : <xsl:variable name="testCall" select="'false'"/> : <xsl:template match="/"> : <html> : <head> : <title>Conditional call-template test</title> : </head> : <body> : <xsl:if test="$testCall = 'true'"> : <xsl:call-template name="foobar"/> : </xsl:if> : No errors. Go home and relax : </body> : </html> : </xsl:template> : <!-- uncomment this and it will work --> : <!--xsl:template name="foobar"> : <b>hi</b> : </xsl:template--> : : </xsl:stylesheet> it appears that in the earlier version of xalan, calling an undefined template would be a runtime error. In other words the template name is not looked up until you try use the template. (and since you don't ever try to actually use the temlate then you don't get the runtime error). it appears that in the new version, referencing an undefined template is a compile time error. In other words the template name is looked up while the template is being prepared for use (i.e. compile time.) For most people this would be considered an advantage. Typos in template names will be detected ahead of time, thereby avoiding hard to track down run-time errors. I assume that you could simply define do-nothing versions of the templates for the style sheets that don't really use them. you might "include" or "import" the defintions, and then play with relative paths so as to suck in the alternate versions depending on who is using the style sheet. $0.02 -- This space not for rent. | ![]() | ![]() | ![]() |
| Company | Legal | Press | Partners | Careers | Sitemap | Contact Us | Altova Blog | |||||
|
