簡體   English   中英

如何從Xslt中的現有程序集訪問C#靜態方法(可能在靜態類中)?

[英]How to access C# static method (might be in static class) from existing assemblies in Xslt?

我們如何從Xslt中的靜態類訪問靜態方法? 靜態類已在程序集中定義。

這是我要引用的靜態類的定義

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>

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

任何幫助/評論將不勝感激。 我也想知道這是否可行。

您要這樣做的主要原因是什么?

可能沒有辦法為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);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM