有人可以告诉我下面的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而没有设置任何特定于工厂的系统属性。
提前谢谢!
答案 0 :(得分:2)
<html><head><title>{$title}</title></head></html>
问题在上面一行。
在XSLT中,{someXPathExpression}
语法只能用于(某些)属性,而不能用于文本节点。
解决方案:
将以上内容替换为:
<html><head><title><xsl:value-of select="$title"/></title></head></html>