0

我在 VisualStudio2010 的 BizTalk(2010) 映射文件的脚本 functoid 中编写了一些 InlineXslt 脚本。(它仅支持 1.0 版)。

我需要在我的 xslt 脚本中的许多地方使用当前日期时间。为了获得当前的日期时间,我使用了日期时间 functoid 或在一个脚本 functoid 中编写了一些 C# 代码,并将其作为参数传递给另一个脚本 functoid(编写 XSLT 脚本的地方)。

但是现在如果我从映射器生成 XSL 文件,它包含 C# 命名空间和 C# 代码。

现在我想只使用 XSLT 来完成它。我想包含 EXSLT 命名空间 (http:/exslt.org/dates-and-times) 和 extension-element-prefixes="date" ,并使用函数 "date:date-time()" 获取当前日期和时间.

我不想修改生成的 XSL 文件,而是想在更早的阶段实现这一点,这样当我从 BizTalk 映射器生成 xsl 文件时,它只包含 XSLT 脚本。

是否可以在脚本 functoid 的 InlineXslt 或 Inlinexslt 模板中包含此命名空间,以便我可以在 functoid 中编写 XSLT 脚本时使用函数 date-time()?

4

1 回答 1

0

来自这篇博客How the extend a custom Xslt in BizTalk using EXSLT and the Mvp.Xml project by Richard Hallgren

您必须创建一个 XML 扩展

<?xml version="1.0" encoding="utf-8"?>
<ExtensionObjects>
    <ExtensionObject
     Namespace="http://exslt.org/dates-and-times"
     AssemblyName="Mvp.Xml,
     Version=2.3.0.0, Culture=neutral,
     PublicKeyToken=6ead800d778c9b9f"
     ClassName="Mvp.Xml.Exslt.ExsltDatesAndTimes"/>
</ExtensionObjects>

创建自定义 XSLT

<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
                xmlns:S1="http://ExtendedMapping.Schema1"
                xmlns:S2="http://ExtendedMapping.Schema2"
                xmlns:exslt="http://exslt.org/dates-and-times"
                version="1.0"> 

    <xsl:template match="/">
        <S2:Root>
            <Field>
                <xsl:value-of select="exslt:dateTime()"/>
            </Field>
        </S2:Root>
    </xsl:template>
</xsl:stylesheet>

然后将映射配置为将自定义扩展 XML 指向第一个,自定义 XSL 路径指向第二个。这意味着您将需要在 XSL 文件中进行所有映射,而不是在具有 functoid 的映射器网格上进行,因为这些将被忽略。

于 2014-01-20T20:15:05.407 回答