Каковы допустимые типы возвращаемых .NET методов объекта расширения XSLT?

.NET позволяет расширять XSLT с помощью так называемого объекта расширения. Очень удобно и очень удобно. Вы делаете это, создавая класс:

public class VeryHandyExtensionFunctions
{
    public string VerySmartStringConcat(XPathNodeIterator NodeList)
    {
       return "some very smart string concat based on NodeList";
    }
}

в ожидании некоторой магии (см. ниже), вы можете обратиться к VerySmartStringConcat как часть вашего xslt:

<xsl:value-of select="someprefix:VerySmartStringConcat(nodes[@withsomeattribute])"/>

Единственное, что нужно сделать для того, чтобы это произошло, - передать экземпляр вашего класса расширения (VeryHandyExtensionFunctions выше) в класс XslCompiledTransform, используя XsltArgumentList:

XsltArgumentList xsltArg = new XsltArgumentList();
xsltArg.AddExtensionObject("SomeUriResolvingToSomePrefix",new VeryHandyExtensionFunctions);
XslCompiledTransform xslTransform;
XmlWriter W = XmlWriter.Create(SomeTarget, Xslt.OutputSettings);
xslTransform.Transform(SomeXmlDocument, xsltArg, W);

.NET довольно разумно разбирается в том, как преобразовать типы XML в входные параметры и вернуть типы функций расширения. Однако время от времени он жалуется на не тип поддержки. Какие поддерживаемые типы?

Ответ 1

После некоторых исследований я нашел это на http://msdn.microsoft.com/en-us/magazine/bb986125.aspx:

3C Тип XPath → Эквивалентный класс .NET(тип)
Строка → System.String
Boolean → System.Boolean
Номер → System.Double
Фрагмент дерева результатов → System.Xml.XPath.XPathNavigator
Node Set → System.Xml.XPath.XPathNodeIterator