【发布时间】:2011-02-08 22:57:20
【问题描述】:
XsltArgumentList 没有 count() 方法。有什么办法可以得到吗?
此外,它似乎不支持 foreach 构造枚举。
另外,在 Visual Studio 2010 Xslt 调试器中,如何使用 xslt 参数?
【问题讨论】:
-
不清楚您要做什么。你应该知道你传递的参数!如果您想知道某些特定样式表期望的参数,那么您应该重新表述这个问题。
XsltArgumentList 没有 count() 方法。有什么办法可以得到吗?
此外,它似乎不支持 foreach 构造枚举。
另外,在 Visual Studio 2010 Xslt 调试器中,如何使用 xslt 参数?
【问题讨论】:
您可以使用反射来获取存储此数据的私有字段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,并负责使两者保持同步。
【讨论】:
你到底想做什么?我们能得到更多信息吗?通常您知道需要传递到 XSLT 的参数并从那里生成参数列表。您通常不会收到需要循环访问的参数列表。
【讨论】: