xslt: массив параметров в .NET - PullRequest
3 голосов
/ 13 ноября 2009

Простой вопрос, но есть ли решение?

У меня есть типичное C # -приложение, которое запускает "new XslCompiledTransform.Transform (...);" Я передаю ему аргументы param, все типа string.

Я хочу передать ему параметр типа массив: строки или даже, скажем, массив объектов.

Я использую C # Я ограничен XSL 1.0.

Как я могу выполнить эту задачу чистым способом, чтобы избежать написания ненужного кода в .NET?

1 Ответ

7 голосов
/ 13 ноября 2009

XsltArgumentList.AddParam принимает следующие типы для значения:

W3C Type                      Equivalent.NET Class (Type)

String (XPath)                String
Boolean (XPath)               Boolean
Number (XPath)                Double
Result Tree Fragment (XSLT)   XPathNavigator
Node Set (XPath)              XPathNodeIterator, XPathNavigator[]
Node* (XPath)                 XPathNavigator

Таким образом, вы не можете передать массив, но вы можете создать фрагмент XML со своими значениями и передать его как XPathNavigator.

Пример

string[] strings = new string[] { "a", "b", "c" };

XPathNavigator[] navigators =
    strings.Select(s => new XElement("item", s).CreateNavigator()).ToArray();

XsltArgumentList args = new XsltArgumentList();
args.AddParam("items", "", navigators);

Созданные узлы XML выглядят так:

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