XSLT参数未被替换

时间:2010-05-10 15:27:53

标签: java xslt parameters

有人可以告诉我下面的XSLT转换有什么问题吗?我已将其剥离到最低限度。

基本上,我想替换一个参数“title”,但我无法让它运行。转换只是忽略参数。我用一些感叹号突出显示了相关位。

非常感谢任何建议。

public class Test {
    private static String xslt =
            "<?xml version=\"1.0\"?>\n" + 
            "<xsl:stylesheet\n" + 
            "        xmlns:xsl=\"http://www.w3.org/1999/XSL/Transform\"\n" + 
            "        version=\"1.0\">\n" + 
            "    <xsl:param name=\"title\" />\n" + 
            "    <xsl:template match=\"/Foo\">\n" +
            "        <html><head><title>{$title}</title></head></html>\n" + // !!!!!!!!!!!
            "    </xsl:template>\n" +
            "</xsl:stylesheet>\n";

    public static void main(String[] args) {

        try {
            final DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
            dbf.setNamespaceAware( true );
            final DocumentBuilder db = dbf.newDocumentBuilder();
            final Document document = db.newDocument();
            document.appendChild( document.createElement( "Foo" ) );

            final StringWriter resultWriter = new StringWriter();
            TransformerFactory factory = TransformerFactory.newInstance();
            Transformer transformer = factory.newTransformer( new StreamSource( new StringReader( xslt ) ) );
            // !!!!!!!!!!!!!!!!!!
            transformer.setParameter( "title", "This is a title" );
            // !!!!!!!!!!!!!!!!!!
            transformer.transform( new DOMSource( document ), new StreamResult( resultWriter ) );

            System.out.println( resultWriter.toString() );
        } catch( Exception ex ) {
            ex.printStackTrace();
        }
    }
}

我正在使用Java 6而没有设置任何特定于工厂的系统属性。

提前谢谢!

1 个答案:

答案 0 :(得分:2)

<html><head><title>{$title}</title></head></html>

问题在上面一行。

在XSLT中,{someXPathExpression}语法只能用于(某些)属性,而不能用于文本节点。

解决方案

将以上内容替换为:

<html><head><title><xsl:value-of select="$title"/></title></head></html>