Есть ли список определенных функций C # для userCSharp в XSLT? - PullRequest
2 голосов
/ 21 марта 2011

Я пытаюсь отладить карту BizTalk, в которой есть некоторый пользовательский XSLT, использующий C #. Я нашел:

  • userCSharp: MathSubtract
  • userCSharp: MathAdd
  • userCSharp: StringSize
  • userCSharp: StringSubstring

и несколько других, но мне трудно найти в Интернете некоторые ресурсы, определяющие все доступные предопределенные функции c # и их документацию.

Причина, по которой я спрашиваю, заключается в том, что у меня есть «userCSharp: StringFind», который взрывается, говоря, что StringFind () - неизвестная функция XSLT.

1 Ответ

4 голосов
/ 22 марта 2011

Функции xslt MathSubtract, MathAdd и т. Д. Соответствуют предопределенным Functoids, которые использует ваша карта (в xmlns 'userCSharp').

Большинство функтоидов - это просто встроенные функции C # XSLT - BizTalk добавляет скрипт C # для функтоида в нижней части xslt, когда карта компилируется. (Я думаю, что некоторые простые функтоиды также могут использовать примитивы xslt). В этот блок также будут добавлены ваши собственные скриптообразные функтоиды.

Чтобы узнать, что делает BizTalk, скомпилируйте свою сборку, содержащую карты, а затем с помощью команды «Показать все файлы» посмотрите соответствующий файл .btm.cs, чтобы увидеть, что было добавлено.

Сайт BizBert дает довольно хорошую справку о внедрении каждого из функтоидов.

(Двойное "" экранирование происходит потому, что XSLT хранится в строковой константе)

private const string _strMap = @"<?xml version=""1.0"" encoding=""UTF-16""?>

<xsl:stylesheet xmlns:xsl=""http://www.w3.org/1999/XSL/Transform"" xmlns:msxsl=""urn:schemas-microsoft-com:xslt"" 
...
xmlns:userCSharp=""http://schemas.microsoft.com/BizTalk/2003/userCSharp"">

, а затем блок сценария CDATA внизу

  <msxsl:script language=""C#"" implements-prefix=""userCSharp""><![CDATA[

public bool IsNumeric(string val)
{
    if (val == null)
    {
        return false;
    }
    double d = 0;
    return Double.TryParse(val, System.Globalization.NumberStyles.AllowThousands | System.Globalization.NumberStyles.Float, System.Globalization.CultureInfo.InvariantCulture, out d);
}

public string MathAdd(string param0, string param1)
{
    System.Collections.ArrayList listValues = new System.Collections.ArrayList();

... и т. Д.

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