2013-01-07 48 views
-1

我們如何從Xslt中的靜態類訪問靜態方法?靜態類已經在程序集中定義。如何從Xslt中的現有程序集訪問C#靜態方法(可能在靜態類中)?

這裏是靜態類我想引用

namespace Helper 
{ 
    public static class StaticXsltHelper 
    { 
     public static double CalclutePerctange(int a, int b) 
     { 
      return b == 0 ? 0 : ((double)a * 100)/b; 
     } 
    } 
} 

的定義,我們如何在XSLT參考StaticXsltHelper.CalclutePerctange方法?

對於非靜態類和非靜態方法,我可以使用下面的語法

XslCompiledTransform t = new XslCompiledTransform(); 
XsltArgumentList l = new XsltArgumentList(); 
l.AddExtensionObject("a:b", new XsltHelper()); 
t.Load("XSLTFile.xslt", new XsltSettings(true, true), null); 
using (StreamWriter w = new StreamWriter("XMLFileOut.xml")) 
{ 
    t.Transform("XMLFile.xml", l, w); 
} 

這裏是XsltHelper類的定義

namespace Helper 
{ 
    public class XsltHelper 
    { 
     public double CalclutePerctange(int a, int b) 
     { 
      return b == 0 ? 0 : ((double)a * 100)/b; 
     } 
    } 
} 

而且XSLT看起來像

<xsl:stylesheet version="1.0" xmlns:prefix_1="http://www.w3.org/2001/XMLSchema-instance" xmlns:helper="a:b" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
    <xsl:output method="xml" omit-xml-declaration="yes"/> 
    <xsl:template match="/"> 
    <xsl:for-each select="Entity"> 
     <Entity> 
      <Percent> 
      <xsl:value-of select="helper:CalclutePerctange(Value, Total)"/> 
      </Percent> 

但我沒有找到關於靜態方法的任何信息。

任何形式的幫助/評論將不勝感激。另外我想知道這是否可能。

+1

目前還不清楚你在問什麼。爲什麼你不能在靜態方法中使用它? – Servy

+0

對此感到抱歉。基本上我想在Xslt中使用現有的靜態方法。 – malay

+0

什麼是現有的靜態方法,如何做,以及當您嘗試使用它們時會發生什麼? – Servy

回答

3

你想做這件事的主要原因是什麼?

很可能沒有辦法爲XSLT擴展對象使用靜態類。

如果問題是這些方法在另一個組件已經決定了你不能修改有關使用在裝配這樣的事情,你可以修改方法如下:

public class XsltHelper 
{ 
     public double CalculatePerctange(int a, int b) 
     { 
      return StaticXsltHelper.CalculatePercentage(a, b);    
     } 
} 

或者你可以使用一個單如果你擔心的是,你要創建的對象太多:

namespace Helper 
{ 
    public class XsltHelper 
    { 
     private XsltHelper(); 
     public readonly XsltHelper Instance = new XsltHelper(); 

     public double CalculatePerctange(int a, int b) 
     { 
      return b == 0 ? 0 : ((double)a * 100)/b; 
     } 
    } 
} 

然後用:

l.AddExtensionObject("a:b", XsltHelper.Instance); 
+0

是的,我在其他地方被告知同樣的解決方案。我們只能訪問非靜態方法。 – malay

相關問題