Каковы допустимые типы возврата .NET из метода объекта расширения XSLT? - PullRequest
10 голосов
/ 13 декабря 2008

.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 Ответ

13 голосов
/ 13 декабря 2008

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...