我在使用Saxon 9.3設置參數時遇到問題。我有基本的變換函數撒克遜XSLT傳遞參數
private void runXSLT(String inFile, String xslt, String outFile, String[] name, String[] val)
{
Processor proc = new Processor();
XdmNode input = proc.NewDocumentBuilder().Build(new Uri(inFile));
XsltTransformer transformer = proc.NewXsltCompiler().Compile(new Uri(xslt)).Load();
transformer.InitialContextNode = input;
if (name != null)
for (int i = 0; i < name.Length; i++)
transformer.SetParameter(new QName("", "", name[i]), new XdmAtomicValue(val[i]));
Serializer serializer = new Serializer();
FileStream outStream = new FileStream(outFile, FileMode.Create, FileAccess.Write);
serializer.SetOutputStream(outStream);
transformer.Run(serializer);
outStream.Close();
}
其中字符串[]名稱和String [] VAL具有相等的長度與參數名稱和相應的值的陣列。例如:name [0]是「version」,val [0]是「1.0」,name [1]是「filename」,val [1]是「test.xml」
我基於這個函數關閉樣本代碼在文檔中給出,並且它對我的各種xslt轉換正確運行,除非我有參數傳遞給xslt。轉換將發生,如果參數未設置。
從調試中,我知道程序確實爲我的名字數組中的每個值運行SetParameter。我在每個xslt文檔中都有一個xsl:param,當使用命令行工具Transform.exe時,輸入參數並獲得正確的轉換。
我想如何傳遞參數有什麼問題嗎?
感謝您的回覆,並建議更小的幫助我測試我的功能。我創建了一個專門用於運行此功能的單獨程序,並找出它的工作原理,這意味着在向函數輸入參數時必須存在一些模糊的一致性錯誤。如果我有其他問題,我會跟進撒克遜人的幫助。 –