1

C# コードの IKVM で Apache FOP を使用しています。xslt スタイルシートを使用して pdf を生成し、結果を xsl fo として取得します。カスタム関数を使用するという問題が 1 つあります。私のスタイルシート宣言:

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
  xmlns:fo="http://www.w3.org/1999/XSL/Format"
                 xmlns:cal="xalan://m.test"
              extension-element-prefixes="cal"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://www.w3.org/2001/XMLSchema-instance http://www.xmlblueprint.com/documents/fop.xsd">

カスタム関数:

namespace m
{
    public class test
    {
        public static string zzz(ExpressionContext x, object d)
        {
            return "test";
        }
    }
}

そして、xslt からこれを呼び出します。

 <xsl:value-of select="cal:zzz(1)"/>

コンパイルするコード:

 FopFactory fopFactory = FopFactory.newInstance();
            fopFactory.ignoreNamespace("http://www.w3.org/2001/XMLSchema-instance");
            fopFactory.setUserConfig(new File("fop.xconf"));

            OutputStream o = new DotNetOutputMemoryStream();

            try
            {
                Fop fop = fopFactory.newFop("application/pdf", o);

                TransformerFactory factory = TransformerFactory.newInstance();

                Source xsltSrc = new StreamSource(new File("data.xsl"));
                Transformer transformer = factory.newTransformer(xsltSrc);

                var bytes = System.IO.File.ReadAllBytes("data.xml"); //"HR_CV.fo");
                var stream = new DotNetInputMemoryStream(new System.IO.MemoryStream(bytes));

                Source src = new StreamSource(stream);

                Result res = new SAXResult(fop.getDefaultHandler());

                transformer.transform(src, res);
            }
            finally
            {
                o.close();
            }

私が得た例外は次のとおりです: java.lang.NoSychMethodExtension: For extension function, could not find method org.apache.xml.utils.NodeVector.zzz([ExpressionContext,])

私が間違っていることは何ですか?

4

1 に答える 1

-1

zzz単一の引数(1)を使用して関数を呼び出しています。ただし、関数には2つの引数が必要です。両方の引数を指定すると、問題なく機能する可能性があります。

于 2012-10-12T09:18:04.923 に答える