C#XSLT:如何调试此错误?

Inf*_*nd' 1 c# xslt

我必须在我的XSLT文件中包含一个C#脚本.以便计算两个dateTime值之间的差异(并将其添加到其他一些值)..我 需要接受所有可能的日期格式 ..我想是用XSLT来做..但是因为XSLT不允许这样做(含蓄地)..我发现了调用C#脚本的这种补救措施..我必须从许多不同的C#程序中调用XSL转换..所以它会是在所有调用C#代码中写这段代码是痛苦的(相当不可能).. :(你能找到一些补救措施吗?

这是XSLT代码..

 <xsl:variable name="date1" select="//date1"/>
  <xsl:variable name="date2" select="//date2"/>
  <msxsl:script language="C#" implements-prefix="cs">
    <![CDATA[

    private static string[] formats = new string[]
    {
        "MM/dd/yyyy HH:mm:ss tt",
        "MM/dd/yyyy HH:mm:ss",
        "MM/dd/yyyy H:mm:ss tt",
        "MM/dd/yyyy H:mm:ss",
"M/dd/yyyy HH:mm:ss tt",
"M/dd/yyyy HH:mm:ss",
"M/dd/yyyy H:mm:ss tt",
"M/dd/yyyy H:mm:ss",
"MM/d/yyyy HH:mm:ss tt",
"MM/d/yyyy HH:mm:ss",
"MM/d/yyyy H:mm:ss tt",
"MM/d/yyyy H:mm:ss", 
"M/d/yyyy HH:mm:ss tt",   
"M/d/yyyy HH:mm:ss", 
"M/d/yyyy H:mm:ss tt", 
"M/d/yyyy H:mm:ss",      
    };


      public string datedif(string date1, string date2) {


            DateTime startTime;
            DateTime endTime;
            DateTime ThirdDate;

string date3="12/12/2009 00:00:00";

            DateTime.TryParseExact(date1, formats, new CultureInfo("en-US"), 
                                   DateTimeStyles.None, out startTime);
            DateTime.TryParseExact(date2, formats, new CultureInfo("en-US"), 
                                   DateTimeStyles.None, out endTime);
            DateTime.TryParseExact(date3, formats, new CultureInfo("en-US"), 
                                   DateTimeStyles.None, out ThirdDate);

ThirdDate = ThirdDate.Add(endTime.Subtract(startTime));


string result = ThirdDate.ToString("MM'/'dd'/'yyyy' 'HH':'mm':'ss");
return(result);

         }
     ]]>
  </msxsl:script>
  <xsl:template match="datediff">
    <xsl:element name="{local-name()}">
      <xsl:value-of select="cs:datedif($date1, $date2)" />
    </xsl:element>
  </xsl:template>
Run Code Online (Sandbox Code Playgroud)

而错误是:

  1. "DateTimeStyles"名称在当前上下文中不存在

  2. 找不到类型或命名空间名称'CultureInfo'(您是否缺少using指令或程序集引用?)

ThanQ非常.. Jon Skeet

Jon*_*eet 6

这些是来自C#编译器的错误.您需要提供有关您正在尝试执行的操作的更多信息.

听起来你至少错过了一个使用指令:

using System.Globalization;
Run Code Online (Sandbox Code Playgroud)

但你还没有说出错误在哪里或者你在做什么.

编辑:如果你不能别人改变什么,然后更改引用DateTimeStyles,并CultureInfo成为完全合格:

global::System.Globalization.DateTimeStyles
global::System.Globalization.CultureInfo
Run Code Online (Sandbox Code Playgroud)

所以例如你有:

DateTime.TryParseExact(date1, formats,
     new global::System.Globalization.CultureInfo("en-US"), 
     global::System.Globalization.DateTimeStyles.None, out startTime);
Run Code Online (Sandbox Code Playgroud)

  • 它们不是语句 - 我的观点是在您使用"DateTimeStyles"的脚本中的任何地方,使用"global :: System.Globalization.DateTimeStyles"和CultureInfo相同. (3认同)