我将一个简单的字符串参数传递给我的 Saxon 驱动的 XSLT,但它没有被接收。这是 XSL ( min.xsl):<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="2.0"> <xsl:template match="/"> <xsl:param name="in"/> <Out> <xsl:choose> <xsl:when test="Val = $in">match!</xsl:when> <xsl:otherwise> <xsl:value-of select="Val"/> != <xsl:value-of select="$in"/> </xsl:otherwise> </xsl:choose> </Out> </xsl:template></xsl:stylesheet>下面是用于调用 XSLT 的代码:import javax.xml.transform.Transformer;import javax.xml.transform.TransformerFactory;import javax.xml.transform.stream.StreamResult;import javax.xml.transform.stream.StreamSource;import java.io.FileInputStream;import java.io.StringReader;public class MinXSLT { public static void main(String[] args) throws Exception { try { Class.forName("net.sf.saxon.TransformerFactoryImpl"); System.setProperty("javax.xml.transform.TransformerFactory", "net.sf.saxon.TransformerFactoryImpl"); System.out.println("Plugged in Saxon"); } catch (ClassNotFoundException ignore) {} final TransformerFactory transformerFactory = TransformerFactory.newInstance(); Transformer e = transformerFactory.newTemplates(new StreamSource(new FileInputStream("src/test/resources/min.xsl"))).newTransformer(); e.setParameter("in", "x"); e.transform(new StreamSource(new StringReader("<Val>x</Val>")), new StreamResult(System.out)); }}这dependencies是我的部分pom.xml:<dependencies> <dependency> <groupId>saxon</groupId> <artifactId>saxon-he</artifactId> <version>9.2</version> </dependency></dependencies>是的,只是saxon-he。我在这里犯了什么罪?作为记录,我尝试使用较新版本的 Saxon(net.sf.saxon:Saxon-HE:9.7.x等),结果相同;但是在实际项目中我被困住了saxon:saxon-he:9.2所以升级并不是一个真正的选择。
1 回答
慕斯709654
TA贡献1840条经验 获得超5个赞
您需要移动<xsl:param name="in"/>
any的外部xsl:template
以将其作为可以在转换之前设置的全局参数。xsl:param
内部模板不能由 JAXP 转换 API 设置,在带有 Saxon API 的 XSLT 3 中,您可以直接调用命名模板或函数并在这样做时设置其参数,但是您在 JAXP 中将模板应用于源的方法并不适用于此. 只需使用全局参数,即移动xsl:param
any的外部xsl:template
并使其成为 的子项xsl:stylesheet/xsl:transform
。
添加回答
举报
0/150
提交
取消