2017-03-14 47 views
1

我有我的自定義Java函數執行某些操作,我需要將它放到XSL中,以便它可以在選定節點上執行某些操作。我用的是這樣的:與Java或JS一起使用<msxsl:script>元素

<msxsl:script implements-prefix="user" language="java"> 
    <![CDATA[ 
public String doSomething(String input) { 

    // does something 
    return result; 
} 
]]></msxsl:script> 

聲明命名空間:

... xmlns:msxsl="urn:schemas-microsoft-com:xslt" exclude-result-prefixes="msxsl" xmlns:user="example.com"> 

,並呼籲:

<xsl:variable name="var"> 
    <xsl:value-of select="user:doSomething(node)"/> 
</xsl:variable> 

這導致 「無法編譯樣式表」 的錯誤。

也試圖用Javascript代替java代碼,錯誤是一樣的。

您是否知道如何執行此操作或其他方法?如何將Java代碼插入到XSL中並調用它?

+0

'urn:schemas-microsoft-com:xslt'以及'msxsl'中的'ms'前綴意味着這是對它們* XSLT處理器的非標準** Microsoft擴展**。非標準意味着您不能將其與其他XSLT處理器(如Java附帶的處理器)一起使用。 – Andreas

+0

@Andreas,感謝您的評論!也許你知道Java的替代品? – alalambda

+1

Xalan確實有類似的功能:https://xml.apache.org/xalan-j/extensions.html – Andreas

回答

1

從XSLT調用其他語言(如Java或Javascript)的機制取決於您使用的XSLT處理器,並且通常它們不能跨處理器移植。 msxsl:腳本機制專門用於Microsoft的MSXML。

目前常用的唯一兩款Java處理器是Xalan和Saxon,它們都具有調用Java代碼的機制。機制是相似的,但在許多細節上有所不同。但正如Martin Honnen所指出的那樣,XSLT 2.0(或3.0)所需的擴展函數不太可能需要1.0。

+0

感謝您的回答!不幸的是,我只能使用1.0。在Xalan中使用Apache XSL-FO。 – alalambda

+0

僅僅因爲你不得不使用18年前的技術而感到難過。有些人仍然需要使用COBOL。 –