2012-10-10 31 views
0

我使用的Apache FOP從我的C#代碼的IKVM自定義函數。我通過使用xslt樣式表生成pdf以得到xsl fo的結果。我有一個問題,那就是使用自定義函數。 我的樣式表聲明:Xalan和XSLT的

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

例外? n個I得到的是: java.lang.NoSychMethodExtension:對於擴展功能,找不到方法org.apache.xml.utils.NodeVector.zzz([ExpressionContext,])

我做錯了嗎?

回答

0

你調用zzz功能帶一個參數(1)。但是你的函數需要兩個參數。如果你提供了兩個參數,它很可能會工作得很好。