簡體   English   中英

Java + XSL,從模板中調用Java代碼

[英]Java+XSL, calling Java code from within template

我正在使用Java中的XSL模板,並且正在嘗試構建一個自定義標簽,該標簽將調用一些Java代碼,然后將結果放入模板中。 我使用XOM作為XML引擎。 我對XOM和XSL都很陌生,所以我什至不確定這是否是一個聰明的主意。

我要執行的操作的一個非常簡單的示例是,其中my_ns是帶有“ custom_tag”的自定義名稱空間,該名稱是方法custom tag

<xsl:template name="foo">
 <my_ns:custom_tag />
</xsl:template>

public Node custom_tag() {
  return Node("<a/>");
}

#result of calling the template foo
<a/>

我樂於接受涉及從XSL模板調用Java的替代方法的建議。

這是一個關於您的XSLT處理器是否可以在模板內執行/調用Java代碼而不是XML引擎/解析器/ api更多的問題。 Java的默認XSLT處理器是來自Apache Software Foundation的Xalan-C或Xalan-J(不記得是哪個)。 我確實相信它們都允許擴展函數在方法內部執行Java代碼。 在使用xalan-j擴展功能之前,我已經在XSL樣式表中完成了JDBC sql查詢。 我還記得閱讀過文章,Saxon XSLT處理器也支持此功能。 您將搜索XSLT處理器以獲取實現此功能的詳細信息。

關於這是否是一個好主意的問題實際上取決於問題。 即使我使用了上面提到的SQL擴展功能,並且在這種情況下也很合適,但之后我還是覺得很臟。 我之所以這樣說,是因為添加特定於供應商的擴展功能后,您將失去XSLT處理器之間的可移植性。

您的示例顯示您只是在輸出中簡單地創建了一個新節點,如果是這種情況,那么當XSLT的主要功能之一是創建節點時,我認為不需要Java來執行此操作。 我懷疑您的真正問題比簡單地創建一個節點還要復雜,所以我建議您可能要研究一下用Java完成所有工作以獲得想要的結果,或者用Java進行一些工作並傳遞一個參數(使用xsl:param元素的名稱/值對)到XSL樣式表的運行時。

以下是一些快速入門網站,可幫助您入門:

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM