PRB: Análisis de XML con el carácter no válido puede elevar ArgumentException

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): 325694
Renuncia a responsabilidad de los contenidos de la KB sobre productos a los que ya no se ofrece asistencia alguna
El presente artículo se escribió para productos para los que Microsoft ya no ofrece soporte técnico. Por tanto, el presente artículo se ofrece "tal cual" y no será actualizado.
Síntomas
Cuando se carga XML en un objeto XmlDocument y el código XML contiene un carácter no válido, se produce una excepción. Puede ser la excepción XmlException o una excepción ArgumentException, dependiendo de qué es el carácter no válido. Por ejemplo, si el XML contiene 0 x 13 , se notifica XmlException. Si el XML contiene 0xE9 y la codificación del documento es US-ASCII, se notifica una excepción ArgumentException.
Causa
Se provocan las excepciones para las dos razones siguientes:
  • 0 x 13 está fuera de los caracteres del intervalo válido de XML, por lo tanto se inicia XmlException. Caracteres válidos son:
    # x 9 | # XA | # xd | [# x 20 # xD7FF] | [# xE000-#xFFFD] | [# x 10000 # x10FFFF]
  • 0xE9 es un carácter XML válido, sin embargo, es más allá del intervalo definido por el US-ASCII codificación. Por lo tanto, se produce una excepción ArgumentException.
Estado
Este comportamiento es por diseño.
Más información

Pasos para reproducir el comportamiento

  1. En Microsoft Visual Studio. NET, cree un nuevo proyecto de aplicación de consola de .NET en Visual Basic.
  2. Pegue el código siguiente en la ventana de código:
    Imports System.XmlImports System.IOModule Module1    Sub Main()        Dim xDoc As XmlDocument = New XmlDocument()        'Create XML string containing invalid XML character 0x13        Dim badData As String = "<?xml version='1.0'?>" & _                                "<Data>" & Chr(19) & "</Data>"        'Create byte to insert into stream, set byte equal to         'invalid US - ASCII character 0xE9        Dim byteval As Byte = Byte.Parse("233")        Dim stream As MemoryStream = New MemoryStream()        'Create objects that will generate stream. You must use BinaryWriter to insert the invalid character, because StreamWriter would        'insert a unicode character.          Dim swriter As StreamWriter = New StreamWriter(stream, System.Text.Encoding.ASCII)        Dim bwriter As BinaryWriter = New BinaryWriter(stream, System.Text.Encoding.ASCII)        'Write the first part of the XML instance to the stream.        swriter.Write("<?xml version='1.0'?>" & _                                "<Data>")        swriter.Flush()        'Write invalid character to stream.        bwriter.Write(byteval)        bwriter.Flush()        'Write the rest of the XML to the stream.        swriter.Write("</Data>")        swriter.Flush()        stream.Position = 0        Try            'Demonstrate an XmlException being raised.            xDoc.LoadXml(badData)            Console.Write(xDoc.OuterXml)        Catch xmlEx As XmlException            Console.WriteLine("This is an XmlException: " & xmlEx.Message)        Catch argEx As ArgumentException            Console.WriteLine("This is an ArgumentException: " & argEx.Message)        End Try        Try            'Demonstrate an ArgumentException being raised.            xDoc.Load(stream)            Console.Write(xDoc.OuterXml)        Catch xmlEx As XmlException            Console.WriteLine("This is an XmlException: " & xmlEx.Message)        Catch argEx As ArgumentException            Console.WriteLine("This is an ArgumentException: " & argEx.Message)        End Try        Console.ReadLine()    End SubEnd Module					
  3. Ejecute la aplicación.
Los siguientes se escriben en la consola:
This is an XmlException: '&#x13;', hexadecimal value 0x13, is an invalid character. Line 1, position 28.				
Se trata de una excepción ArgumentException: byte no válido se encontró índice byte 28.

Advertencia: este artículo se tradujo automáticamente

Propiedades

Id. de artículo: 325694 - Última revisión: 01/22/2004 02:11:57 - Revisión: 2.0

Microsoft .NET Framework Class Libraries 1.0, Microsoft .NET Framework Class Libraries 1.1

  • kbmt kbprb kbxml KB325694 KbMtes
Comentarios