REVISIÓN: Se produce una excepción System.Xml.Xsl.XsltException cuando intenta realizar una transformación XSLT mediante una hoja de estilo XSLT que utiliza la función format-number

Seleccione idioma Seleccione idioma
Id. de artículo: 832757 - Ver los productos a los que se aplica este artículo
Expandir todo | Contraer todo

En esta página

Resumen

crear una hoja de estilos de XSLT (Extensible Stylesheet Language Transformation) que utiliza la función format-number . En Microsoft Visual Studio. NET, al realizar una transformación XSLT que utiliza esta hoja de estilos para intentar convertir a los números positivos a cadenas, se produce una excepción System.Xml.Xsl.XsltException. Para resolver el problema, descargue e instale una revisión. Para obtener la revisión, póngase en contacto con soporte técnico de Microsoft.

Síntomas

Puede crear un Extensible Stylesheet Language hoja de estilo de transformación (XSLT) que utiliza la función format-number . En Microsoft Visual Studio. NET, cuando intenta realizar una transformación XSLT mediante esta hoja de estilo para convertir a números positivos a cadenas, recibirá el siguiente mensaje de error:
Error de excepción no controlada del tipo 'System.Xml.Xsl.XsltException' en system.xml.dll
Si controla la excepción para mostrar la excepción interna y el mensaje de excepción, recibirá el siguiente resultado:
System.ArgumentException: NumberGroupSizes
Nombre de parámetro: cada elemento de la matriz de valores debe estar entre uno y nueve, excepto para el último elemento, que puede ser cero.
en System.Globalization.NumberFormatInfo.CheckGroupSize (propName String, Int32 [] groupSize)
en System.Xml.Xsl.XsltCompileContext.FormatNumber (Double valor formatPattern String, String formatName)
en System.Xml.Xsl.FuncFormatNumber.Invoke (XsltContext xsltContext, Object [] args docContext XPathNavigator)
en System.Xml.XPath.XsltFunction.InvokeFunction (qy XPathNavigator, iterador XPathNodeIterator)

Error en la función 'format-number()'.

Solución

Ahora hay disponible un hotfix para el que Microsoft proporciona soporte técnico, pero que sólo se diseñó para corregir el problema descrito en este artículo. Aplíquelo sólo a sistemas que experimenten este problema específico. Este hotfix puede ser sometido a comprobaciones adicionales. Por tanto, si no se ve muy afectado por este problema, se recomienda que espere al próximo Service Pack que contenga este hotfix.

Para resolver este problema inmediatamente, póngase en contacto con soporte técnico de Microsoft para obtener la revisión. Para obtener una lista completa de los números de teléfono de los servicios de soporte técnico de Microsoft e información acerca de los costos de soporte, visite el siguiente sitio Web:
http://support.microsoft.com/contactus/?ws=support
Nota en casos especiales, los costos derivados normalmente de las llamadas al soporte técnico pueden cancelarse si un profesional de soporte técnico de Microsoft determina que una actualización específica resolverá el problema. Los costos habituales de soporte se aplicarán a las preguntas de soporte técnico adicionales y problemas que no guarden relación con la actualización en cuestión.La versión en inglés de este hotfix tiene los atributos de archivo enumerados en la siguiente tabla u otros posteriores. Las fechas y horas de estos archivos aparecen en la hora universal coordinada (UTC). La información de los archivos se convertirá a la hora local cuando la vea. Para averiguar la diferencia entre hora UTC y la hora local, utilice la ficha zona horaria de la herramienta fecha y hora en el panel de control.
   Date         Time   Version            Size    File name
   --------------------------------------------------------------
   03-Dec-2003  19:43  1.1.4322.978    1,339,392  System.xml.dll

Estado

Microsoft ha confirmado que se trata de un problema de los productos de Microsoft enumerados en la sección "La información de este artículo se refiere a:".

Más información

Pasos para reproducir el comportamiento

  1. Cree un proyecto de aplicación de consola

    1. Inicie Microsoft Visual Studio .NET 2003.
    2. En el menú archivo , seleccione nuevo y, a continuación, haga clic en proyecto .
    3. En Tipos de proyecto , haga clic en Proyectos de Visual C# y, a continuación, haga clic en Aplicación de consola , bajo plantillas .
    4. En el cuadro nombre , escriba FormatNumConsole .
    5. Haga clic en Aceptar . De manera predeterminada, se abre la ventana de código de Class1.cs .
  2. Crear una hoja de estilos XSLT que utiliza la función format-number

    1. En el Explorador de soluciones, haga clic con el botón secundario del mouse en FormatNumConsole , elija Agregar y, a continuación, haga clic en Agregar nuevo elemento . Aparecerá el el cuadro de diálogo Agregar nuevo elemento - FormatNumConsole .
    2. En categorías , haga clic en Elementos de proyecto local .
    3. En plantillas , haga clic en XSLT archivo .
    4. En el cuadro nombre , escriba number.xslt formato y, a continuación, haga clic en Abrir . Abre la ventana código de formato number.xslt .
    5. Reemplazar el código XML existente con el XML siguiente código para crear una plantilla para la presentación de datos 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. Crear un archivo XML que proporciona datos XML

    1. En el Explorador de soluciones, haga clic con el botón secundario del mouse en FormatNumConsole , elija Agregar y, a continuación, haga clic en Agregar nuevo elemento . Aparecerá el el cuadro de diálogo Agregar nuevo elemento - FormatNumConsole .
    2. En plantillas , haga clic en XML archivo .
    3. En el cuadro nombre , escriba number.xml formato y, a continuación, haga clic en Abrir . Abre la ventana código de formato number.xml .
    4. Reemplace el código XML existente con el XML siguiente código para proporcionar datos XML:
      <?xml version="1.0" encoding="UTF-8"?>
      <root>
          <number>1000</number>
      </root>
  4. Intente realizar una transformación XSLT mediante la hoja de estilos XSLT y el archivo XML

    1. Cambie a la ventana de código de Class1.cs.
    2. Reemplace el código existente con el código siguiente se utiliza la clase XslTransform para transformar los datos XML mediante la hoja de estilos XSLT.

      Nota En el código siguiente, utilizar las rutas de acceso archivo apropiado en las llamadas al constructor de XPathDocument y el método 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. Generar la aplicación y, a continuación, ejecute la aplicación. El resultado que se menciona en la sección "Síntomas" aparece en una ventana de consola.

Referencias

Para obtener información adicional, haga clic en los números de artículo siguientes para verlos en Microsoft Knowledge Base:
824684Descripción de la terminología estándar utilizada para describir las actualizaciones de software de Microsoft
307494Cómo aplicar una transformación XSL a XML para transmisión mediante Visual C# .NET
Para obtener más información, visite los siguientes sitios Web de Microsoft Developer Network (MSDN):
Clase XsltException
http://msdn2.microsoft.com/en-us/library/system.xml.xsl.xsltexception(vs.71).aspx
función format-number
http://msdn2.microsoft.com/en-us/library/ws343esk.aspx
XslTransform (clase)
http://msdn2.microsoft.com/en-us/library/system.xml.xsl.xsltransform(vs.71).aspx

Propiedades

Id. de artículo: 832757 - Última revisión: lunes, 21 de mayo de 2007 - Versión: 2.4
La información de este artículo se refiere a:
  • Microsoft .NET Framework 1.1
Palabras clave: 
kbmt kbqfe kbhotfixserver kbbug kbformat kbstyle kbxml kbsample kberrmsg kbcode kbfix KB832757 KbMtes
Traducción automática
IMPORTANTE: Este artículo ha sido traducido por un software de traducción automática de Microsoft (http://support.microsoft.com/gp/mtdetails) en lugar de un traductor humano. Microsoft le ofrece artículos traducidos por un traductor humano y artículos traducidos automáticamente para que tenga acceso en su propio idioma a todos los artículos de nuestra base de conocimientos (Knowledge Base). Sin embargo, los artículos traducidos automáticamente pueden contener errores en el vocabulario, la sintaxis o la gramática, como los que un extranjero podría cometer al hablar el idioma. Microsoft no se hace responsable de cualquier imprecisión, error o daño ocasionado por una mala traducción del contenido o como consecuencia de su utilización por nuestros clientes. Microsoft suele actualizar el software de traducción frecuentemente.
Haga clic aquí para ver el artículo original (en inglés): 832757

Enviar comentarios

 

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