1

我正在尝试使用 MSXSL 6.0 处理器执行 XML 转换,并且 XSLT 文件的顶部有一个 C# 方法。这是我正在使用的示例 XSLT:

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
    version="1.0" xmlns:msxsl="urn:schemas-microsoft-com:xslt" xmlns:user="urn:my-scripts">
    <msxsl:script language="C#" implements-prefix="user">
        <msxsl:using namespace="System.DateTime"/>
        <msxsl:using namespace="System.TimeZone"/>
        <![CDATA[
            public string GetLocalTime(string returnPart, string utcTime){
                string[] timeList = utcTime.Split(':');
                string endString = string.Join(":", timeList.Take(3));
                DateTime result = TimeZone.CurrentTimeZone.ToLocalTime(DateTime.Parse(endString));
                if(returnPart == "Date")
                {
                    return result.ToString("MM/dd/yyyy");
                }
                else if(returnPart == "Time")
                {
                    return result.ToString("HH:mm:ss");
                }
                else
                {
                    return result.ToString();
                }
            }           
        ]]>
    </msxsl:script>

最初,我在 msxsl:script 标记之后有一行,如下所示:

<msxsl:assembly name="System.DateTime" />

尝试运行转换时,我在这里收到错误:

External XSLT processing started...

Error occurred while compiling blah blah blah

    Code:   0x80004005
    Keyword msxsl:script may not contain msxsl:assembly.
    ...done 

我做了一点研究,发现系统程序集默认包含在内,所以我删除了组装线并尝试再次运行它。这次我得到了:

External XSLT processing started...

Error occurred while compiling blah blah blah

Code:   0x80004005
Keyword msxsl:script may not contain msxsl:using.
...done 

我试过搜索这个特定的错误,但没有发现任何非常有用的东西。任何帮助,将不胜感激。

谢谢

4

1 回答 1

2

如果您使用的是 msxsl 处理器,您将无法运行嵌入在 Xslt 中的 C# 代码。msxsl 正在使用本机 Xml/Xslt 处理器,它不会为您引导 CLR(托管运行时)。使用本机 Xml 堆栈时,您可以在内部使用 vbscript/jscript msxsl:script,但 C#/VB.NET 只能与托管 Xslt 处理器(即XsltCompiledTransform)一起使用。

于 2017-10-20T00:16:08.770 回答