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

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

En esta página

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.Xml
    Imports System.IO
    
    Module 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 Sub
    
    End 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.

Propiedades

Id. de artículo: 325694 - Última revisión: jueves, 22 de enero de 2004 - Versión: 2.0
La información de este artículo se refiere a:
  • Microsoft .NET Framework Class Libraries 1.0
  • Microsoft .NET Framework Class Libraries 1.1
Palabras clave: 
kbmt kbprb kbxml KB325694 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): 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.

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