2011-10-18 17 views
1

Saxon 9.3でパラメータを設定する際に問題があります。私は、文字列[]名、および文字列[] valがパラメータ名と対応する値と等しい長さのアレイであるSaxon XSLT passingパラメータ

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(); 
} 

私の基本的な変換機能を有しています。例:name [0]は "version"、val [0]は "1.0"、name [1]は "filename"、val [1]は "test.xml"

この関数はサンプルに基づいています私は、xsltに渡すパラメータがある場合を除いて、私の様々なxslt変換のために正しく機能します。パラメータが設定されていないかのように変換が行われます。

デバッグから、私の名前配列の各値に対してプログラムがSetParameterを実行することがわかりました。 xsl:paramがxsltの各ドキュメントで定義されています。コマンドラインツールTransform.exeを使用すると、パラメータが入力され、正しい変換が得られます。

パラメータを渡す方法に問題がありますか?

答えて

2

コマンドラインから動作する場合、このコードでは機能しない理由はわかりません。 1つの違いは、コマンドラインはparamsをuntypedAtomicとして渡しますが、文字列として渡すのに対し、バージョンでは数値が必要な場合は違いが生じる可能性があります。

サクソンヘルプのリスト(ここで質問すると、メッセージが表示されたかどうかはわかりますが、メッセージは適切に追跡されます)を再現性のある小さなサンプルで追跡することをお勧めします。 C#プログラム、およびシンプルなスタイルシートです。

+0

応答をお寄せいただきありがとうございました。私の機能をテストするのに役立ちました。私はこの機能を実行するために特別なプログラムを作成し、それが機能していることを理解しました。つまり、関数にパラメータを入力する方法に曖昧な一貫したエラーがなければなりません。私が他の問題を抱えているなら、私はサクソンヘルプをフォローアップします。 –

関連する問題