XSLT 中是否有为 userCSharp 定义的 C# 函数列表?

发布于 2024-10-24 16:36:12 字数 334 浏览 2 评论 0原文

我正在尝试调试 BizTalk 映射,其中包含一些使用 C# 的自定义 XSLT。我发现:

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

和其他一些资源,但我发现很难在网上找到一些定义所有可用的预定义 c# 函数及其文档的资源。

我问的原因是因为它有一个“我有一个”userCSharp:StringFind”,它会爆炸说 StringFind() 是一个未知的 XSLT 函数。

I'm trying to debug a BizTalk map that has some custom XSLT in it that makes use of C#. I've found:

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

and a few others but I'm finding it difficult to find some resources online defining all of the available predefined c# functions and their documentation.

The reason I ask is because it has a I have a "userCSharp:StringFind" which blows up saying StringFind() is an unknown XSLT function.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

轻许诺言 2024-10-31 16:36:12

xslt 函数 MathSubtract、MathAdd 等对应于地图使用的预定义 Functoid(在 xmlns 'userCSharp' 中)。

大多数 functoid 只是内联 XSLT C# 函数 - 当编译映射时,BizTalk 在 xslt 底部添加 functoid 的 C# 脚本。 (我认为一些简单的 functoid 也可以使用 xslt 原语)。您自己的脚本 functoid 也将添加到此块中。

您可以通过编译包含映射的程序集,然后使用“显示所有文件”命令查看相应的 .btm.cs 文件来了解已添加的内容,从而了解 BizTalk 正在执行的操作。

BizBert 网站 对每个 functoid 的实现提供了很好的参考。

(双“”转义是因为 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();

...等等

The xslt functions MathSubtract, MathAdd etc correspond to the predefined Functoids that your map uses (in the xmlns 'userCSharp').

Most of the functoids are just inline XSLT C# functions - BizTalk adds the C# script for the functoid at the bottom of the xslt when the map gets compiled. (I think some of the simple functoids can use xslt primitives as well). Your own script functoids will also be added to this block.

You can see what BizTalk is doing by compiling your assembly containing the maps, and then using the "Show all Files" command to look at the corresponding .btm.cs file to see what has been added.

BizBert site gives quite a good reference on the implementation of each of the functoids.

(The double "" escaping is because the XSLT is kept in a string constant)

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"">

and then a script CDATA block at the bottom

  <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();

... etc

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文