我正在尝试在XSLT转换期间传递参数。以下是xsl样式表。
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:param name="param1" select="'defaultval1'" />
<xsl:param name="param2" select="'defaultval2'" />
<xsl:template match="/">
<xslttest>
<tagg param1="{$param1}"><xsl:value-of select="$param2" /></tagg>
</xslttest>
</xsl:template>
</xsl:stylesheet>
以下是Java代码中的部分内容。
File xsltFile = new File("template.xsl");
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
DocumentBuilder builder = factory.newDocumentBuilder();
Document stylesheet = builder.parse("template.xsl");
TransformerFactory transformerFactory = TransformerFactory.newInstance();
Transformer xsltTransformer = transformerFactory.newTransformer(new DOMSource(stylesheet));
//Transformer xsltTransformer = transformerFactory.newTransformer(new StreamSource(xsltFile));
xsltTransformer.setParameter("param1", "value1");
xsltTransformer.setParameter("param2", "value2");
StreamResult result = new StreamResult(System.out);
xsltTransformer.transform(new DOMSource(builder.newDocument()), result);
我遇到了以下错误: ERROR: '变量或参数'param1'未定义。' FATAL ERROR: '无法编译样式表'
然而,如果我使用下面的代码创建转换器,一切都正常。
Transformer xsltTransformer = transformerFactory.newTransformer(new StreamSource(xsltFile));
问题1:我只是想知道在创建Transformer时使用DOMSource有什么问题。
问题2:这是否是替换XML文档中占位符值的理想方式之一?如果我的占位符在源XML文档中,是否有任何(简单明了的)方法可以使用样式表进行替换(并传递参数)?