-1

Xsltの静的クラスから静的メソッドにアクセスするにはどうすればよいですか? 静的クラスは既にアセンブリで定義されています。

ここに参照したい静的クラスの定義があります

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

StaticXsltHelper.CalclutePerctangeXslt でメソッドを参照するにはどうすればよいですか?

非静的クラスと非静的メソッドの場合、次の構文を使用できます

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>

しかし、静的メソッドについては何も見つかりませんでした。

あらゆる種類のヘルプ/コメントをいただければ幸いです。また、これが可能かどうかも知りたいです。

4

1 に答える 1

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);
于 2013-01-08T05:51:10.450 に答える