【问题标题】:.NET XsltArgumentList - any way to count/enumerate parameters?.NET XsltArgumentList - 任何计算/枚举参数的方法?
【发布时间】:2011-02-08 22:57:20
【问题描述】:

XsltArgumentList 没有 count() 方法。有什么办法可以得到吗?

此外,它似乎不支持 foreach 构造枚举。

另外,在 Visual Studio 2010 Xslt 调试器中,如何使用 xslt 参数?

【问题讨论】:

  • 不清楚您要做什么。你应该知道你传递的参数!如果您想知道某些特定样式表期望的参数,那么您应该重新表述这个问题。

标签: c# .net xml xslt


【解决方案1】:

您可以使用反射来获取存储此数据的私有字段parameters。这确实意味着您依赖于未记录的实现细节,因此这可能随时中断。

如果它只是用于调试目的,我想它没问题。请注意,您可以通过监视窗口并在即时窗口中输入?xslArg.parameters 来使用它。

XsltArgumentList xslArg = new XsltArgumentList();

string name = "John";
xslArg.AddParam("name", "", name);

DateTime d = DateTime.Now;
xslArg.AddParam("date", "", d.ToString());

FieldInfo fi = xslArg.GetType().GetField("parameters", BindingFlags.NonPublic | 
                                                       BindingFlags.Instance);

System.Collections.Hashtable parameters = fi.GetValue(xslArg) as System.Collections.Hashtable;

if (parameters != null)
{
    foreach (System.Collections.DictionaryEntry item in parameters)
        Console.WriteLine("{0} | {1}", item.Key, item.Value);
}

另一种选择是创建一个包装类。此类将包含 Add 和 Remove 方法,并公开一个参数集合和一个 XsltArgumentList,并负责使两者保持同步。

【讨论】:

    【解决方案2】:

    你到底想做什么?我们能得到更多信息吗?通常您知道需要传递到 XSLT 的参数并从那里生成参数列表。您通常不会收到需要循环访问的参数列表。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2010-09-13
      • 1970-01-01
      • 2011-01-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多