Каковы допустимые типы возврата .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 во входные параметры и типы возвращаемых функций расширения. Однако время от времени он жалуется на неподдерживаемый тип. Какие поддерживаются типы?

13.12.2008 20:49:37
@Boaz: да, это ответ. Можете ли вы закрыть вопрос?
Dimitre Novatchev 14.12.2008 19:42:18
1 ОТВЕТ
РЕШЕНИЕ

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

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

13
13.12.2008 20:52:15