The problem really was with my use of JSTL, not the XML (everything was transforming perfectly in Netscape simply by opening the XML file and specifying the XSL style sheet in that file). I'll post the solution in case anyone else has experienced the same problem.
Hardcoding the file names in the tag doesn't work:
<x:transform xml="ConcertProgram.xml" xslt="ConcertProgram.xsl"/>
You have to import the files with the c:import tag:
<c:import url="ConcertProgram.xml" var="xml" />
<c:import url="ConcertProgram.xsl" var="xsl" />
<x_rt:transform xml="${xml}" xslt="${xsl}" />
However, since my hosting service has not upgraded to
Servlets 2.4/JSP 2.0, I cannot use the new Expression Language. But when I tried the following, it also did not work:
<c:import url="ConcertProgram.xml" var="xml" />
<c:import url="ConcertProgram.xsl" var="xsl" />
<x_rt:transform xml="<%= xml %>" xslt="<%= xsl %>" />
Even though I can use the scripting syntax here, the variables declared in the c:import tag are not recognized. The following does work:
<c:import url="ConcertProgram.xml" var="xml" scope="application" />
<c:import url="ConcertProgram.xsl" var="xsl" scope="application"/>
<x_rt:transform xml="<%= application.getAttribute("xml") %>" xslt="<%= application.getAttribute("xsl") %>" />
In fact, what's really great is that I can still specify the xml and xsl files in context-param tags in the deployment descriptor file for the application and access them using the following:
<c_rt:import url="<%= application.getInitParameter("concertXML") %>" var="xml" scope="application" />
<c_rt:import url="<%= application.getInitParameter("concertXSL") %>" var="xsl" scope="application" />
<x_rt:transform xml="<%= application.getAttribute("xml") %>" xslt="<%= application.getAttribute("xsl") %>" />
All that through trial and error! Ugh.