如何从Xslt中的现有程序集访问c#静态方法(可能在静态类中)
本文关键字:静态方法 静态类 程序集 Xslt 访问 | 更新日期: 2023-09-27 17:50:59
如何在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);