.NET XsltArgumentList - 计算/枚举参数的任何方法?

时间:2011-02-08 22:57:20

标签: c# .net xml xslt

XsltArgumentList没有count()方法。有没有办法解决这个问题?

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

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

2 个答案:

答案 0 :(得分:3)

您可以使用反射来访问存储此数据的私有字段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,并负责保持两者同步。

答案 1 :(得分:0)

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