从XSLT调用C#方法时出错

时间:2013-11-20 13:26:42

标签: c# xslt visual-studio-2012 xslt-2.0 saxon

出现此错误“使用Saxon9ee处理器从XSLT调用C#方法GetImageString(String)时,无法找到名为{urn:rend-scripts} GetImageString()。的匹配单参数函数。帮我解决这个问题。

代码:

 <xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"  xmlns:xpp="http://www.sdl.com/xpp"  xmlns:msxsl="urn:schemas-microsoft-com:xslt" xmlns:rend="urn:rend-scripts" exclude-result-prefixes="xsl xpp msxsl rend">
 <msxsl:script language="c#" implements-prefix="rend">
 <msxsl:assembly href="C:\Users\velagasx\Desktop\dll4rtf\System.IO.dll"/>
 <msxsl:assembly href="C:\Users\velagasx\Desktop\dll4rtf\System.Drawing.dll"/>
 <msxsl:using namespace="System.IO"/>
 <msxsl:using namespace="System.Drawing"/>    
 <![CDATA[
    public string GetImageString(String path_to_image){
      MemoryStream stream = new MemoryStream();
      Image img = Image.FromFile(path_to_image);
      img.Save(stream, System.Drawing.Imaging.ImageFormat.Tiff);
      byte[] bytes = stream.ToArray();
      string output = BitConverter.ToString(bytes, 0).Replace("-", string.Empty);          
      return output;
      }
    ]]>

    <xsl:template match="img">
       <xsl:value-of select="rend:GetImageString(@path)"/>
    </xsl:template>

谢谢

Srinadh

1 个答案:

答案 0 :(得分:1)

命名空间msxsl:script中的

urn:schemas-microsoft-com:xslt是一个专有的扩展元素,最初由各种Microsoft MSXML版本支持,然后通过msxsl:assemblymsxsl:using为Microsoft {XslCompiledTransform进行增强。 1}}。我不认为Saxon支持那个扩展元素。如果您想使用Saxon扩展程序,请选中http://www.saxonica.com/documentation/index.html#!extensibility/dotnetextensions