FIX: A System.Xml.Xsl.XsltException 发生异常时您尝试通过使用 XSLT 样式表使用格式数字函数的执行 XSLT 转换

文章翻译 文章翻译
文章编号: 832757 - 查看本文应用于的产品
展开全部 | 关闭全部

本文内容

概要

您创建使用 格式数字 函数的可扩展样式表语言转换 (XSLT) 样式表的 。在 Microsoft 可 Visual Studio 的.net 时执行 XSLT 转换,试图将正数转换为字符串,使用该样式表的一个 System.Xml.Xsl.XsltException 时发生异常。若要解决该问题,下载并安装一个修补程序。若要获取此修复程序,请与 Microsoft 产品支持服务联系。

症状

您可以创建一个可扩展的样式表语言转换 (XSLT) 样式表使用 号格式的 函数。在 Microsoft 可 Visual Studio 的.net 当您试图执行 XSLT 转换,方法是将正数转换为字符串,使用该样式表时您将收到以下错误消息:
system.xml.dll 中发生未处理的异常的类型 System.Xml.Xsl.XsltException
如果您处理该异常,若要显示内部异常和异常消息,则会收到以下输出:
System.ArgumentException: NumberGroupSizes
参数名称: 值的数组中的每个元素应介于 1 和 9 除外最后一个元素可以是零之间。
在 System.Globalization.NumberFormatInfo.CheckGroupSize (字符串 propName,Int32 [] groupSize)
在 System.Xml.Xsl.XsltCompileContext.FormatNumber (Double 值,String formatPattern,String formatName)
在 System.Xml.Xsl.FuncFormatNumber.Invoke XsltContext xsltContext、 对象 [] 参数 XPathNavigator docContext)
在 System.Xml.XPath.XsltFunction.InvokeFunction (XPathNavigator qy、 XPathNodeIterator 迭代器)

函数 'format-number() 已失败。

解决方案

现在提供 Microsoft,受支持的修复程序,但它只用于解决本文所述的问题。仅将它应用于出现这一特定问题的系统。此修补程序可能还会接受进一步的测试。因此,如果此问题没有对您造成严重的影响,我们建议您等待包含此修补程序的下一个 service pack。

要立即解决此问题,请与 Microsoft 产品支持服务以获取此修复程序。 有关 Microsoft 产品支持服务电话号码和关于支持费用的信息的完整列表,请访问下面的 Microsoft 网站:
http://support.microsoft.com/contactus/?ws=support
注意在特殊的情况中如果 Microsoft 支持专业人员确定某个特定更新才能解决您的问题,可能会被取消通常会导致支持电话的费用。将正常收取支持费用将应用于其他支持问题和不需要进行专门更新的问题。此修补程序的英文版具有文件属性 (或更高版本) 下表中列出。其格式为协调通用时间 (UTC) 列出日期和时间对这些文件。当您查看文件信息时,将转换为本地时间。若要 UTC 与本地时间之间的时差使用控制面板中的日期和时间工具中的 时区 选项卡。
   Date         Time   Version            Size    File name
   --------------------------------------------------------------
   03-Dec-2003  19:43  1.1.4322.978    1,339,392  System.xml.dll

状态

Microsoft 已经确认这是在"适用于"一节中列出的 Microsoft 产品中的问题。

更多信息

重现行为的步骤

  1. 创建控制台应用程序项目

    1. 启动 Microsoft Visual Studio.net 2003年。
    2. 文件 菜单上指向 新建,然后单击 项目
    3. 项目类型 框中,单击 Visual C# 项目,然后单击 模板 下的 控制台应用程序
    4. 名称 框中键入 FormatNumConsole
    5. 单击 确定。默认状态下,Class1.cs 代码窗口打开。
  2. 创建使用格式数字函数的 XSLT 样式表

    1. 在解决方案资源管理器中,用鼠标右键单击 FormatNumConsole,指向 添加,然后再单击 添加新项。在 添加新项-FormatNumConsole 对话框。
    2. 类别 框中,单击 本地项目项
    3. 模板 框中,单击 XSLT 文件
    4. 名称 框中键入 格式 number.xslt,然后单击 打开。在 格式 number.xslt 代码窗口打开。
    5. 替换现有的 XML 代码,与下面的 XML 代码创建的 XML 数据演示文稿的模板:
      <?xml version="1.0" encoding="UTF-8"?>
      <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
          <xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>
          <xsl:template match="/">
              <table>
                  <xsl:apply-templates />
              </table>
          </xsl:template>
          <xsl:template match="number">
              <tr><td><xsl:value-of select="format-number(.,'#,##0;(#,##0)')"/></td></tr>
          </xsl:template>
      </xsl:stylesheet>
  3. 创建一个 XML 文件,它提供了 XML 数据

    1. 在解决方案资源管理器中,用鼠标右键单击 FormatNumConsole,指向 添加,然后再单击 添加新项。在 添加新项-FormatNumConsole 对话框。
    2. 模板 框中,单击 XML 文件
    3. 名称 框中键入 格式 number.xml,然后单击 打开。 在 格式 number.xml 代码窗口打开。
    4. 替换现有的 XML 代码,与下面的 XML 代码提供 XML 数据:
      <?xml version="1.0" encoding="UTF-8"?>
      <root>
          <number>1000</number>
      </root>
  4. 试图执行 XSLT 转换,方法是使用 XSLT 样式表和 XML 文件

    1. 切换到 Class1.cs 代码窗口。
    2. 现有代码替换下面的代码以使用 XslTransform 类来使用 XSLT 样式表转换 XML 数据。

      注意在下面的代码在 XPathDocument 构造函数和 xsltProcessor.Load 方法调用中使用适当的文件路径:
      using System;
      using System.Xml;
      using System.Xml.XPath;
      using System.Xml.Xsl;
      using System.IO;
      using System.Text;
      
      namespace FormatNumConsole
      {
          class Class1
          {
              [STAThread]
              static void Main(string[] args)
              {
                  try
                  {
                      StringBuilder sb = new StringBuilder();
                      StringWriter sw = new StringWriter(sb);
      
                      // Load the XML data that you want to transform.
                      XPathDocument xmlDoc = new XPathDocument("C:\\FormatNumConsole\\format-number.xml");
      
                      // Load the XSLT style sheet that uses the format-number function.
                      XslTransform xsltProcessor = new XslTransform();
                      xsltProcessor.Load("C:\\FormatNumConsole\\format-number.xslt");
      
                      // Transform the XML data, and then send the output to the console.
                      xsltProcessor.Transform(xmlDoc,null,sw,null);
                  }
                  catch(Exception ex)
                  {
                      // Display the inner exception and the exception message.
                      Console.WriteLine(ex.InnerException.ToString());
                      Console.WriteLine();
                      Console.WriteLine(ex.Message);
                      Console.ReadLine();
                  }
              }
          }
      }
    3. 生成了的应用程序,然后运行该应用程序。 在控制台窗口中会出现"症状"部分中提到的输出。

参考

有关更多的信息请单击下面的文章编号,以查看 Microsoft 知识库中相应的文章:
824684用于描述 Microsoft 软件更新的标准术语的说明
307494如何将一个 XSL 转换应用于 XML 中,对于使用 Visual C#.net 的流
有关更多的信息,请访问下面的 Microsoft 开发人员网络 (MSDN) 的网站:
XsltException 类
http://msdn2.microsoft.com/en-us/library/system.xml.xsl.xsltexception(vs.71).aspx
号格式函数
http://msdn2.microsoft.com/en-us/library/ws343esk.aspx
XslTransform 类
http://msdn2.microsoft.com/en-us/library/system.xml.xsl.xsltransform(vs.71).aspx

属性

文章编号: 832757 - 最后修改: 2007年5月21日 - 修订: 2.4
这篇文章中的信息适用于:
  • Microsoft .NET Framework 1.1
关键字:?
kbmt kbqfe kbhotfixserver kbbug kbformat kbstyle kbxml kbsample kberrmsg kbcode kbfix KB832757 KbMtzh
机器翻译
注意:这篇文章是由无人工介入的微软自动的机器翻译软件翻译完成。微软很高兴能同时提供给您由人工翻译的和由机器翻译的文章, 以使您能使用您的语言访问所有的知识库文章。然而由机器翻译的文章并不总是完美的。它可能存在词汇,语法或文法的问题,就像是一个外国人在说中文时总是可能犯这样的错误。虽然我们经常升级机器翻译软件以提高翻译质量,但是我们不保证机器翻译的正确度,也不对由于内容的误译或者客户对它的错误使用所引起的任何直接的, 或间接的可能的问题负责。
点击这里察看该文章的英文版: 832757
Microsoft和/或其各供应商对于为任何目的而在本服务器上发布的文件及有关图形所含信息的适用性,不作任何声明。 所有该等文件及有关图形均"依样"提供,而不带任何性质的保证。Microsoft和/或其各供应商特此声明,对所有与该等信息有关的保证和条件不负任何责任,该等保证和条件包括关于适销性、符合特定用途、所有权和非侵权的所有默示保证和条件。在任何情况下,在由于使用或运行本服务器上的信息所引起的或与该等使用或运行有关的诉讼中,Microsoft和/或其各供应商就因丧失使用、数据或利润所导致的任何特别的、间接的、衍生性的损害或任何因使用而丧失所导致的之损害、数据或利润不负任何责任。

提供反馈

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com