The problem is that the value argument, as computed as "string(.)", isn't what I want. I want the value to be the result of <xsl:apply-templates/>, e.g. not the current node from the input, but the node after being transformed by the other templates in this file. I don't see how to do this. Can someone please help?
Here's the full xsl file I'm using:
<?xml version="1.0"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:lxslt="http://xml.apache.org/xslt"
xmlns:java="http://xml.apache.org/xslt/java"
xmlns:task="edu.virtualschool.model.Task"
extension-element-prefixes="task"
exclude-result-prefixes="java"
>
<xsl:output method="html"/>
<xsl:param name="task"></xsl:param><xsl:template match="/task">
#parse("vel/macros.vel")
#set($totalPages = <xsl:value-of select="count(page)"/>)
#set($pageTitles = [<xsl:for-each select="page">"<xsl:value-of select="@ident"/>",</xsl:for-each>"Submit page"])
<xsl:apply-templates select="page"/>
</xsl:template>
<xsl:template match="page"> <xsl:value-of select="task:addPage($task, string(@ident), string(.))" /> </xsl:template>
<xsl:template match="EmailQuestion|EssayQuestion|NameQuestion|UrlQuestion">
#<xsl:value-of select="name()"/>("<xsl:value-of select="@ident"/>" "<xsl:value-of select="normalize-
space(text())"/>")
</xsl:template>
<xsl:template match="MenuQuestion|RadioQuestion|CheckboxQuestion">
#<xsl:value-of select="name()"/>("<xsl:value-of select="@ident"/>" "<xsl:value-of select="normalize-
space(text())"/>" [<xsl:for-each select="option">"<xsl:value-of select="."/>"<xsl:if test="not(position() = last())">,</xsl:if></xsl:for-each>])
</xsl:template>
<xsl:template match="*"> <xsl:copy-of select="."/> </xsl:template>
</xsl:stylesheet>
For completeness, the code that launches the transform (from Task.java)
TransformerFactory tFactory = TransformerFactory.newInstance();
Transformer transformer = tFactory.newTransformer(new StreamSource(xslFile.toString()));
transformer.setParameter( "task", this );
StringWriter sw = new StringWriter();
transformer.transform(
new StreamSource(xmlFile.toString()),
new StreamResult(sw)
);
System.err.println("out:"+sw); // printed and discarded
this.xmlModified = xmlFile.lastModified();
this.dvslModified = dvslFile.lastModified();
And the addPage method (from Task.java). I don't understand the first two arguments; apparently they aren't needed/required/used based on it working after commenting them
out.
public void addPage(
// org.apache.xalan.extensions.XSLProcessorContext context,
// org.apache.xalan.templates.ElemExtensionCall element,
String ident,
String body
)
{
String pageText =
"#parse(\"vel/macros.vel\")\n"+
"#taskOpening(\""+ident+"\")\n"+
body+"\n"+
"#taskClosing(\""+ident+"\")\n"+
"";
System.err.println("addPage:"+pageText);
pages.add(new Page(this, ident, pageText, new IntegerField(pages.size())));
}
