亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

使用 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 關注
  • 209 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號