为了账号安全,请及时绑定邮箱和手机立即绑定

使用 Saxon 时未选取 XSLT 输入参数?

使用 Saxon 时未选取 XSLT 输入参数?

慕尼黑5688855 2021-09-26 17:15:25
我将一个简单的字符串参数传递给我的 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:paramany的外部xsl:template并使其成为 的子项xsl:stylesheet/xsl:transform


查看完整回答
反对 回复 2021-09-26
  • 1 回答
  • 0 关注
  • 179 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信