System.Xml Namespace

El espacio de nombres System.Xml proporciona compatibilidad basada en estándares para procesar XML. The System.Xml namespace provides standards-based support for processing XML.

Clases

NameTable

Implementa XmlNameTable de un único subproceso.Implements a single-threaded XmlNameTable.

UniqueId

Un identificador único optimizado para Guids.A unique identifier optimized for Guids.

XmlAttribute

Representa un atributo.Represents an attribute. Los valores válidos y predeterminados del atributo se definen en una definición de tipo de documento (DTD) o un esquema.Valid and default values for the attribute are defined in a document type definition (DTD) or schema.

XmlAttributeCollection

Representa una colección de atributos a la que se puede acceder por nombre o índice.Represents a collection of attributes that can be accessed by name or index.

XmlBinaryReaderSession

Permite administrar las cadenas optimizadas de una manera dinámica.Enables optimized strings to be managed in a dynamic way.

XmlBinaryWriterSession

Permite el uso de un diccionario dinámico para comprimir cadenas comunes que aparecen en un mensaje y mantener el estado.Enables using a dynamic dictionary to compress common strings that appear in a message and maintain state.

XmlCDataSection

Representa una sección CDATA.Represents a CDATA section.

XmlCharacterData

Proporciona métodos de manipulación de texto que usan varias clases.Provides text manipulation methods that are used by several classes.

XmlComment

Representa el contenido de un comentario XML.Represents the content of an XML comment.

XmlConvert

Codifica y descodifica nombres XML y proporciona métodos de conversión entre tipos de Common Language Runtime y tipos de lenguajes de definición de esquema XML (XSD).Encodes and decodes XML names, and provides methods for converting between common language runtime types and XML Schema definition language (XSD) types. Cuando se convierten tipos de datos, los valores devueltos no dependen de la configuración regional.When converting data types, the values returned are locale-independent.

XmlDataDocument

Permite que los datos estructurados se almacenen, recuperen y manipulen mediante un DataSet relacional.Allows structured data to be stored, retrieved, and manipulated through a relational DataSet.

XmlDeclaration

Representa el nodo de la declaración XML <?xml version='1.0'...?>.Represents the XML declaration node <?xml version='1.0'...?>.

XmlDictionary

Implementa un diccionario que se usa para optimizar las implementaciones del lector o el escritor XML de Windows Communication Foundation (WCF).Implements a dictionary used to optimize Windows Communication Foundation (WCF)'s XML reader/writer implementations.

XmlDictionaryReader

Una clase abstract de la que Windows Communication Foundation (WCF) se deriva XmlReader para hacer serialización y deserialización.An abstract class that the Windows Communication Foundation (WCF) derives from XmlReader to do serialization and deserialization.

XmlDictionaryReaderQuotas

Contiene los valores de cuota configurables para XmlDictionaryReaders.Contains configurable quota values for XmlDictionaryReaders.

XmlDictionaryString

Representa una entrada almacenada en un XmlDictionary.Represents an entry stored in a XmlDictionary.

XmlDictionaryWriter

Representa una clase abstracta de la que Windows Communication Foundation (WCF) se deriva XmlWriter para hacer serialización y deserialización.Represents an abstract class that Windows Communication Foundation (WCF) derives from XmlWriter to do serialization and deserialization.

XmlDocument

Representa un documento XML.Represents an XML document. Puede usar esta clase para cargar, validar, editar, agregar y posicionar el código XML en un documento.You can use this class to load, validate, edit, add, and position XML in a document.

XmlDocumentFragment

Representa un objeto ligero que es útil para las operaciones de inserción de árbol.Represents a lightweight object that is useful for tree insert operations.

XmlDocumentType

Representa la declaración de tipos de documento.Represents the document type declaration.

XmlDocumentXPathExtensions
XmlElement

Representa un elemento.Represents an element.

XmlEntity

Representa una declaración de entidad, como <!ENTITY... >.Represents an entity declaration, such as <!ENTITY... >.

XmlEntityReference

Representa un nodo de referencia a entidad.Represents an entity reference node.

XmlException

Devuelve información detallada sobre la última excepción.Returns detailed information about the last exception.

XmlImplementation

Define el contexto para un conjunto de objetos XmlDocument.Defines the context for a set of XmlDocument objects.

XmlLinkedNode

Obtiene el nodo inmediatamente antes o después de este nodo.Gets the node immediately preceding or following this node.

XmlNamedNodeMap

Representa una colección de nodos a la que se puede acceder por nombre o índice.Represents a collection of nodes that can be accessed by name or index.

XmlNamespaceManager

Resuelve, agrega y quita los espacios de nombres de una colección, y proporciona administración de ámbito de estos espacios de nombres.Resolves, adds, and removes namespaces to a collection and provides scope management for these namespaces.

XmlNameTable

Tabla de objetos en forma de cadena subdividida.Table of atomized string objects.

XmlNode

Representa un único nodo en el documento XML.Represents a single node in the XML document.

XmlNodeChangedEventArgs

Proporciona datos para los eventos NodeChanged, NodeChanging, NodeInserted, NodeInserting, NodeRemoved y NodeRemoving.Provides data for the NodeChanged, NodeChanging, NodeInserted, NodeInserting, NodeRemoved and NodeRemoving events.

XmlNodeList

Representa una colección ordenada de nodos.Represents an ordered collection of nodes.

XmlNodeReader

Representa un lector que proporciona acceso rápido, sin almacenamiento en caché y con desplazamiento sólo hacia delante, a los datos XML de un objeto XmlNode.Represents a reader that provides fast, non-cached forward only access to XML data in an XmlNode.

XmlNotation

Representa una declaración de notaciones, como <!NOTATION... >.Represents a notation declaration, such as <!NOTATION... >.

XmlParserContext

Proporciona toda la información de contexto que necesita el objeto XmlReader para analizar un fragmento de XML.Provides all the context information required by the XmlReader to parse an XML fragment.

XmlProcessingInstruction

Representa una instrucción de procesamiento que XML define para conservar información específica del procesador en el texto del documento.Represents a processing instruction, which XML defines to keep processor-specific information in the text of the document.

XmlQualifiedName

Representa un nombre completo XML.Represents an XML qualified name.

XmlReader

Representa un lector que proporciona acceso rápido a datos XML, sin almacenamiento en caché y con desplazamiento solo hacia delante.Represents a reader that provides fast, noncached, forward-only access to XML data.

XmlReaderSettings

Especifica un conjunto de características compatibles en el objeto XmlReader creado mediante el método Create.Specifies a set of features to support on the XmlReader object created by the Create method.

XmlResolver

Resuelve los recursos XML externos designados por un identificador uniforme de recursos (URI).Resolves external XML resources named by a Uniform Resource Identifier (URI).

XmlSecureResolver

Ayuda a proteger otra implementación de XmlResolver ajustando el objeto XmlResolver y restringiendo los recursos a los que tiene acceso el XmlResolver subyacente.Helps to secure another implementation of XmlResolver by wrapping the XmlResolver object and restricting the resources that the underlying XmlResolver has access to.

XmlSignificantWhitespace

Representa el espacio en blanco entre marcas en un nodo de contenido mixto o espacio en blanco dentro del ámbito xml:space= "preserve".Represents white space between markup in a mixed content node or white space within an xml:space= 'preserve' scope. También se hace referencia a esto como espacio en blanco significativo.This is also referred to as significant white space.

XmlText

Representa el contenido de texto de un elemento o atributo.Represents the text content of an element or attribute.

XmlTextReader

Representa un lector que proporciona acceso rápido a datos XML, sin almacenamiento en caché y con desplazamiento solo hacia delante.Represents a reader that provides fast, non-cached, forward-only access to XML data.

A partir de .NET Framework 2.0, se recomienda usar la clase XmlReader en su lugar.Starting with the .NET Framework 2.0, we recommend that you use the XmlReader class instead.

XmlTextWriter

Representa un sistema de escritura que proporciona un medio rápido, sin almacenamiento en caché y con desplazamiento sólo hacia delante para generar secuencias o archivos con datos XML que satisface las recomendaciones relativas a espacios de nombres en XML y Extensible Markup Language (XML) 1.0 del Consorcio W3C.Represents a writer that provides a fast, non-cached, forward-only way of generating streams or files containing XML data that conforms to the W3C Extensible Markup Language (XML) 1.0 and the Namespaces in XML recommendations.

A partir de .NET Framework 2.0, se recomienda usar la clase XmlWriter en su lugar.Starting with the .NET Framework 2.0, we recommend that you use the XmlWriter class instead.

XmlUrlResolver

Resuelve los recursos XML externos designados por un identificador uniforme de recursos (URI).Resolves external XML resources named by a Uniform Resource Identifier (URI).

XmlValidatingReader

Representa un lector que proporciona validación de definiciones de tipos de documentos (DTD), de esquemas reducidos de datos XML (esquemas XDR) y del lenguaje de definición de esquemas XML (esquemas XSD).Represents a reader that provides document type definition (DTD), XML-Data Reduced (XDR) schema, and XML Schema definition language (XSD) validation.

Esta clase está obsoleta.This class is obsolete. A partir de .NET Framework 2.0, se recomienda usar la clase XmlReaderSettings y el método Create para crear un lector XML de validación.Starting with the .NET Framework 2.0, we recommend that you use the XmlReaderSettings class and the Create method to create a validating XML reader.

XmlWhitespace

Representa los espacios en blanco en el contenido del elemento.Represents white space in element content.

XmlWriter

Representa un sistema de escritura que constituye una manera rápida, no almacenada en caché y de solo avance para generar flujos o archivos que contienen datos XML.Represents a writer that provides a fast, non-cached, forward-only way to generate streams or files that contain XML data.

XmlWriterSettings

Especifica un conjunto de características compatibles en el objeto XmlWriter creado mediante el método Create.Specifies a set of features to support on the XmlWriter object created by the Create method.

XmlXapResolver

El tipo XmlXapResolver se usa para resolver recursos del paquete XAP de la aplicación Silverlight.The XmlXapResolver type is used to resolve resources in the Silverlight application's XAP package.

Interfaces

IApplicationResourceStreamResolver

Representa una resolución de secuencias de recursos de aplicación.Represents an application resource stream resolver.

IFragmentCapableXmlDictionaryWriter

Contiene propiedades y métodos que cuando son implementados por un XmlDictionaryWriter, permiten el procesamiento de fragmentos XML.Contains properties and methods that when implemented by a XmlDictionaryWriter, allows processing of XML fragments.

IHasXmlNode

Permite que una clase devuelva XmlNode desde el contexto o la posición actuales.Enables a class to return an XmlNode from the current context or position.

IStreamProvider

Representa una interfaz que se puede implementar mediante clases que proporcionan secuencias.Represents an interface that can be implemented by classes providing streams.

IXmlBinaryReaderInitializer

Proporciona métodos para reinicializar un lector binario para leer un nuevo documento.Provides methods for reinitializing a binary reader to read a new document.

IXmlBinaryWriterInitializer

Especifica los requisitos de implementación para sistemas de escritura binarios XML que derivan de esta interfaz.Specifies implementation requirements for XML binary writers that derive from this interface.

IXmlDictionary

interface que define el contrato que un diccionario Xml debe implementar para ser utilizado por XmlDictionaryReader e implementaciones XmlDictionaryWriter.An interface that defines the contract that an Xml dictionary must implement to be used by XmlDictionaryReader and XmlDictionaryWriter implementations.

IXmlLineInfo

Proporciona una interfaz para habilitar una clase que devuelva información de línea y posición.Provides an interface to enable a class to return line and position information.

IXmlMtomReaderInitializer

Especifica los requisitos de implementación para los lectores de texto XML MTOM que derivan de esta interfaz.Specifies implementation requirements for XML MTOM readers that derive from this interface.

IXmlMtomWriterInitializer

Cuando es implementada por un sistema de escritura MTOM, esta interfaz asegura la inicialización para un sistema de escritura MTOM.When implemented by an MTOM writer, this interface ensures initialization for an MTOM writer.

IXmlNamespaceResolver

Proporciona acceso de solo lectura a un conjunto de asignaciones de prefijos y espacios de nombres.Provides read-only access to a set of prefix and namespace mappings.

IXmlTextReaderInitializer

Especifica los requisitos de implementación para los lectores de texto XML que derivan de esta interfaz.Specifies implementation requirements for XML text readers that derive from this interface.

IXmlTextWriterInitializer

Especifica los requisitos de implementación para los editores de texto XML que derivan de esta interfaz.Specifies implementation requirements for XML text writers that derive from this interface.

Enumeraciones

ConformanceLevel

Especifica el número de comprobaciones de entrada o de salida que realizan los objetos XmlReader y XmlWriter.Specifies the amount of input or output checking that XmlReader and XmlWriter objects perform.

DtdProcessing

Especifica las opciones para procesar DTD. La clase DtdProcessing utiliza la enumeración XmlReaderSettings.The DtdProcessing enumeration is used by the XmlReaderSettings class.

EntityHandling

Especifica cómo XmlTextReader o XmlValidatingReader controlan las entidades.Specifies how the XmlTextReader or XmlValidatingReader handle entities.

Formatting

Especifica las opciones de formato de XmlTextWriter.Specifies formatting options for the XmlTextWriter.

NamespaceHandling

Especifica si se van a quitar las declaraciones de espacio de nombres duplicadas en XmlWriter.Specifies whether to remove duplicate namespace declarations in the XmlWriter.

NewLineHandling

Especifica cómo controlar los saltos de línea.Specifies how to handle line breaks.

ReadState

Especifica el estado del lector.Specifies the state of the reader.

ValidationType

Especifica el tipo de validación que se va a realizar.Specifies the type of validation to perform.

WhitespaceHandling

Especifica cómo se controla el espacio en blanco.Specifies how white space is handled.

WriteState

Especifica el estado de XmlWriter.Specifies the state of the XmlWriter.

XmlDateTimeSerializationMode

Especifica cómo tratar el valor de tiempo al realizar una conversión entre una cadena y DateTime.Specifies how to treat the time value when converting between string and DateTime.

XmlDictionaryReaderQuotaTypes

Enumera los valores de cuota configurables para XmlDictionaryReaders.Enumerates the configurable quota values for XmlDictionaryReaders.

XmlNamespaceScope

Define el ámbito de espacio de nombres.Defines the namespace scope.

XmlNodeChangedAction

Especifica el tipo de cambio de nodo.Specifies the type of node change.

XmlNodeOrder

Describe el orden del documento de un nodo en comparación con un segundo nodo.Describes the document order of a node compared to a second node.

XmlNodeType

Especifica el tipo de nodo.Specifies the type of node.

XmlOutputMethod

Especifica el método utilizado para serializar la salida de XmlWriter.Specifies the method used to serialize the XmlWriter output.

XmlSpace

Especifica el ámbito de xml:space actual.Specifies the current xml:space scope.

XmlTokenizedType

Representa el tipo XML de la cadena. Esto permite que la cadena se lea como un tipo XML concreto; por ejemplo, un tipo de sección CDATA.This allows the string to be read as a particular XML type, for example a CDATA section type.

Delegados

OnXmlDictionaryReaderClose

delegate para un método de devolución de llamada al cerrar el lector.delegate for a callback method when closing the reader.

XmlNodeChangedEventHandler

Representa el método que controla los eventos NodeChanged, NodeChanging, NodeInserted, NodeInserting, NodeRemoved y NodeRemoving.Represents the method that handles NodeChanged, NodeChanging, NodeInserted, NodeInserting, NodeRemoved and NodeRemoving events.

Comentarios

Estándares compatiblesSupported standards

El System.Xml espacio de nombres admite estos estándares:The System.Xml namespace supports these standards:

Consulte la sección diferencias con respecto a las especificaciones W3C dos casos en que las clases XML difieren de las recomendaciones de W3C.See the section Differences from the W3C specs for two cases in which the XML classes differ from the W3C recommendations.

.NET Framework también proporciona otros espacios de nombres para las operaciones relacionadas con XML.The .NET Framework also provides other namespaces for XML-related operations. Para obtener una lista, descripciones y vínculos, vea el espacios de nombres System.Xml página Web.For a list, descriptions, and links, see the System.Xml Namespaces webpage.

Procesamiento asincrónico de XMLProcessing XML asynchronously

El System.Xml.XmlReader y System.Xml.XmlWriter clases incluyen una serie de métodos asincrónicos que se basan en el.The System.Xml.XmlReader and System.Xml.XmlWriter classes include a number of asynchronous methods that are based on the . Estos métodos pueden identificarse por la cadena "Async" al final de sus nombres.These methods can be identified by the string "Async" at the end of their names. Con estos métodos, puede escribir código asincrónico que es similar al código sincrónico, y puede migrar fácilmente el código sincrónico existente en código asincrónico.With these methods, you can write asynchronous code that's similar to your synchronous code, and you can migrate your existing synchronous code to asynchronous code easily.

  • Usar los métodos asincrónicos en aplicaciones donde hay latencia de la secuencia de red significativo.Use the asynchronous methods in apps where there is significant network stream latency. Evite usar las API asincrónicas para operaciones de lectura/escritura de secuencia de archivo local o de secuencia de memoria.Avoid using the asynchronous APIs for memory stream or local file stream read/write operations. La secuencia de entrada XmlTextReader, y XmlTextWriter debe admitir operaciones asincrónicas también.The input stream, XmlTextReader, and XmlTextWriter should support asynchronous operations as well. En caso contrario, todavía se bloqueará los subprocesos por las operaciones de E/S.Otherwise, threads will still be blocked by I/O operations.

  • No se recomienda mezclar las llamadas a funciones sincrónicas y asincrónicas, porque es posible que olvidó usar la await palabra clave o use una API sincrónica, donde es necesaria una asincrónica.We don't recommend mixing synchronous and asynchronous function calls, because you might forget to use the await keyword or use a synchronous API where an asynchronous one is necessary.

  • No establezca la XmlReaderSettings.Async o XmlWriterSettings.Async marca true si no piensa utilizar un método asincrónico.Do not set the XmlReaderSettings.Async or XmlWriterSettings.Async flag to true if you don't intend to use an asynchronous method.

  • Si ha olvidado especificar el await palabra clave cuando se llama a un método asincrónico, los resultados son no deterministas: Puede recibir el resultado esperado o una excepción.If you forget to specify the await keyword when you call an asynchronous method, the results are non-deterministic: You might receive the result you expected or an exception.

  • Cuando un XmlReader objeto está leyendo un nodo de texto grande, podría almacenar en caché sólo un valor de texto parcial y devolver el nodo de texto, por lo que recuperar el XmlReader.Value propiedad podría estar bloqueada por una operación de E/S.When an XmlReader object is reading a large text node, it might cache only a partial text value and return the text node, so retrieving the XmlReader.Value property might be blocked by an I/O operation. Utilice la XmlReader.GetValueAsync método para obtener el valor de texto en modo asincrónico, o use el XmlReader.ReadValueChunkAsync bloquear el método para leer un texto grande en fragmentos.Use the XmlReader.GetValueAsync method to get the text value in asynchronous mode, or use the XmlReader.ReadValueChunkAsync method to read a large text block in chunks.

  • Cuando se usa un XmlWriter de objeto, llame a la XmlWriter.FlushAsync método antes de llamar a XmlWriter.Close para evitar el bloqueo de una operación de E/S.When you use an XmlWriter object, call the XmlWriter.FlushAsync method before calling XmlWriter.Close to avoid blocking an I/O operation.

Diferencias con respecto a las especificaciones del W3CDifferences from the W3C specs

En dos casos que implican las restricciones en los componentes de esquema del grupo de modelo, el System.Xml difiere de espacio de nombres de las recomendaciones de W3C.In two cases that involve constraints on model group schema components, the System.Xml namespace differs from the W3C recommendations.

Coherencia en las declaraciones de elemento:Consistency in element declarations:

En algunos casos, cuando se usan grupos de sustitución, la System.Xml implementación no satisface la "Schema Component Constraint: Declaraciones de elemento coherentes,"que se describe en el restricciones en Model Group Schema Components sección de la especificación de W3C.In some cases, when substitution groups are used, the System.Xml implementation does not satisfy the "Schema Component Constraint: Element Declarations Consistent," which is described in the Constraints on Model Group Schema Components section of the W3C spec.

Por ejemplo, el esquema siguiente incluye los elementos que tienen el mismo nombre pero se utilizan diferentes tipos en el mismo modelo de contenido y los grupos de sustitución.For example, the following schema includes elements that have the same name but different types in the same content model, and substitution groups are used. Esto debería producir un error, pero System.Xml compila y valida el esquema sin errores.This should cause an error, but System.Xml compiles and validates the schema without errors.

<?xml version="1.0" encoding="utf-8" ?>   
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified">  

   <xs:element name="e1" type="t1"/>  
   <xs:complexType name="t1"/>  

   <xs:element name="e2" type="t2" substitutionGroup="e1"/>  
      <xs:complexType name="t2">  
         <xs:complexContent>  
            <xs:extension base="t1">  
         </xs:extension>  
      </xs:complexContent>  
   </xs:complexType>  

   <xs:complexType name="t3">  
      <xs:sequence>  
         <xs:element ref="e1"/>  
         <xs:element name="e2" type="xs:int"/>  
      </xs:sequence>  
   </xs:complexType>  
</xs:schema>  

En este esquema, el tipo t3 contiene una secuencia de elementos.In this schema, type t3 contains a sequence of elements. Debido a la sustitución, la referencia al elemento e1 de la secuencia puede generar el elemento e1 del tipo t1 o el elemento e2 del tipo t2.Because of the substitution, the reference to element e1 from the sequence can result either in element e1 of type t1 or in element e2 of type t2. El último caso daría como resultado una secuencia de dos e2 elementos, donde uno es de tipo t2 y la otra es de tipo xs:int.The latter case would result in a sequence of two e2 elements, where one is of type t2 and the other is of type xs:int.

Atribución de partículas exclusivas:Unique particle attribution:

En las siguientes condiciones, la System.Xml implementación no satisface la "Schema Component Constraint: Atribución de partículas únicas,"que se describe en el restricciones en Model Group Schema Components sección de la especificación de W3C.Under the following conditions, the System.Xml implementation does not satisfy the "Schema Component Constraint: Unique Particle Attribution," which is described in the Constraints on Model Group Schema Components section of the W3C spec.

  • Uno de los elementos del grupo hace referencia a otro elemento.One of the elements in the group references another element.

  • El elemento referenciado es un elemento de encabezado de un grupo de sustituciones.The referenced element is a head element of a substitution group.

  • El grupo de sustitución contiene un elemento que tiene el mismo nombre que uno de los elementos en el grupo.The substitution group contains an element that has the same name as one of the elements in the group.

  • La cardinalidad del elemento que hace referencia el elemento de encabezado de grupo de sustitución y el elemento con el mismo nombre como un elemento de grupo de sustitución no se corrige (minOccurs < maxOccurs).The cardinality of the element that references the substitution group head element and the element with the same name as a substitution group element is not fixed (minOccurs < maxOccurs).

  • La definición del elemento que hace referencia el grupo de sustituciones precede a la definición del elemento con el mismo nombre que un elemento de grupo de sustitución.The definition of the element that references the substitution group precedes the definition of the element with the same name as a substitution group element.

Por ejemplo, en el esquema que figura más abajo, el modelo de contenido es ambiguo y debería generar un error de compilación, pero System.Xml compila el esquema sin errores.For example, in the schema below the content model is ambiguous and should cause a compilation error, but System.Xml compiles the schema without errors.

<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified">  

  <xs:element name="e1" type="xs:int"/>  
  <xs:element name="e2" type="xs:int" substitutionGroup="e1"/>  

  <xs:complexType name="t3">  
    <xs:sequence>  
      <xs:element ref="e1" minOccurs="0" maxOccurs="1"/>  
      <xs:element name="e2" type="xs:int" minOccurs="0" maxOccurs="1"/>  
    </xs:sequence>  
  </xs:complexType>  

  <xs:element name="e3" type="t3"/>  
</xs:schema>  

Si intenta validar el siguiente código XML con el esquema anterior, la validación se producirá un error con el siguiente mensaje: "El elemento 'e3' tiene secundario no válido elemento 'e2'." y un XmlSchemaValidationException se producirá la excepción.If you try to validate the following XML against the schema above, the validation will fail with the following message: "The element 'e3' has invalid child element 'e2'." and an XmlSchemaValidationException exception will be thrown.

<e3>  
  <e2>1</e2>  
  <e2>2</e2>  
</e3>  

Para solucionar este problema, puede intercambiar las declaraciones de elemento en el documento XSD.To work around this problem, you can swap element declarations in the XSD document. Por ejemplo:For example:

<xs:sequence>  
  <xs:element ref="e1" minOccurs="0" maxOccurs="1"/>  
  <xs:element name="e2" type="xs:int" minOccurs="0" maxOccurs="1"/>  
</xs:sequence>  

se transforma en:becomes this:

<xs:sequence>  
  <xs:element name="e2" type="xs:int" minOccurs="0" maxOccurs="1"/>  
  <xs:element ref="e1" minOccurs="0" maxOccurs="1"/>  
</xs:sequence>  

Este es otro ejemplo del mismo problema:Here's another example of the same issue:

<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified">  
   <xs:element name="e1" type="xs:string"/>  
   <xs:element name="e2" type="xs:string" substitutionGroup="e1"/>  

   <xs:complexType name="t3">  
      <xs:sequence>  
         <xs:element ref="e1" minOccurs="0" maxOccurs="1"/>  
         <xs:element name="e2" type="xs:int" minOccurs="0" maxOccurs="1"/>  
      </xs:sequence>  
   </xs:complexType>  
   <xs:element name="e3" type="t3"/>  
</xs:schema>  

Si intenta validar el siguiente código XML con el esquema anterior, la validación se producirá un error con la siguiente excepción: "Excepción no controlada: System.Xml.Schema.XmlSchemaValidationException: El elemento 'e2' no es válido: el valor 'abc' no es válido según su tipo de datos 'http://www.w3.org/2001/XMLSchema:int': la cadena 'abc' no es un valor de Int32 válido. "If you try to validate the following XML against the schema above, the validation will fail with the following exception: "Unhandled Exception: System.Xml.Schema.XmlSchemaValidationException: The 'e2' el element is invalid - The value 'abc' is invalid according to its datatype 'http://www.w3.org/2001/XMLSchema:int' - The string 'abc' is not a valid Int32 value."

<e3><e2>abc</e2></e3>  

Consideraciones de seguridadSecurity considerations

Los tipos y miembros en el System.Xml espacio de nombres se basan en el sistema de seguridad de .NET.The types and members in the System.Xml namespace rely on the .NET security system. Las secciones siguientes tratan problemas de seguridad que son específicas de las tecnologías XML.The following sections discuss security issues that are specific to XML technologies.

Tenga en cuenta también que cuando se usa el System.Xml tipos y miembros, si el XML contiene datos que tiene posibles implicaciones de privacidad, deberá implementar la aplicación de forma que respeten la privacidad de los usuarios finales.Also note that when you use the System.Xml types and members, if the XML contains data that has potential privacy implications, you need to implement your app in a way that respects your end users' privacy.

Acceso externoExternal access

Hay varias tecnologías XML que tienen la capacidad de recuperar otros documentos durante el procesamiento.Several XML technologies have the ability to retrieve other documents during processing. Por ejemplo, una definición de tipo de documento (DTD) puede residir en el documento que se está analizando.For example, a document type definition (DTD) can reside in the document being parsed. La DTD también puede encontrarse en un documento externo al que hace referencia el documento que se está analizando.The DTD can also live in an external document that is referenced by the document being parsed. El lenguaje de definición de esquemas XML (XSD) y las tecnologías XSLT también tienen la capacidad de incluir información de otros archivos.The XML Schema definition language (XSD) and XSLT technologies also have the ability to include information from other files. Estos recursos externos pueden presentar algunos problemas de seguridad.These external resources can present some security concerns. Por ejemplo, conviene asegurarse de que la aplicación recupera los archivos solo desde sitios de confianza y que el archivo recupera no contiene datos malintencionados.For example, you'll want to ensure that your app retrieves files only from trusted sites, and that the file it retrieves doesn't contain malicious data.

La XmlUrlResolver clase se utiliza para cargar documentos XML y para resolver recursos externos como entidades, DTD o esquemas e importar o incluir directivas.The XmlUrlResolver class is used to load XML documents and to resolve external resources such as entities, DTDs, or schemas, and import or include directives.

Puede invalidar esta clase y especificar el XmlResolver objeto va a usar.You can override this class and specify the XmlResolver object to use. Utilice la clase XmlSecureResolver si necesita abrir un recurso que no controla o que no es de confianza.Use the XmlSecureResolver class if you need to open a resource that you do not control, or that is untrusted. XmlSecureResolver contiene un XmlResolver y le permite restringir los recursos a los que tiene acceso el XmlResolver subyacente.The XmlSecureResolver wraps an XmlResolver and allows you to restrict the resources that the underlying XmlResolver has access to.

Denegación de servicioDenial of service

Las siguientes acciones se consideran menos vulnerables a ataques de denegación de servicio, porque las clases System.Xml incluyen un medio de protección frente a dichos ataques.The following scenarios are considered to be less vulnerable to denial of service attacks because the System.Xml classes provide a means of protection from such attacks.

  • Análisis de datos XML de texto.Parsing text XML data.

  • Analizar datos XML binarios si los datos XML binarios fue generados por Microsoft SQL Server.Parsing binary XML data if the binary XML data was generated by Microsoft SQL Server.

  • Escritura de fragmentos y documentos XML desde orígenes de datos al sistema de archivos, secuencias, TextWriter o StringBuilder.Writing XML documents and fragments from data sources to the file system, streams, a TextWriter, or a StringBuilder.

  • Carga de documentos en el objeto del Modelo de objetos de documento (DOM) si se utiliza un objeto XmlReader y XmlReaderSettings.DtdProcessing establecido en DtdProcessing.Prohibit.Loading documents into the Document Object Model (DOM) object if you are using an XmlReader object and XmlReaderSettings.DtdProcessing set to DtdProcessing.Prohibit.

  • Navegación por el objeto DOM.Navigating the DOM object.

No es recomendable realizar las siguientes acciones si le preocupan los ataques de denegación de servicio o si trabaja en un entorno que no es de confianza.The following scenarios are not recommended if you are concerned about denial of service attacks, or if you are working in an untrusted environment.

  • Procesamiento de DTD.DTD processing.

  • Procesamiento de esquemas.Schema processing. Esto incluye agregar un esquema que no es de confianza a la colección de esquemas, compilar un esquema que no es de confianza y realizar la validación utilizando un esquema que no es de confianza.This includes adding an untrusted schema to the schema collection, compiling an untrusted schema, and validating by using an untrusted schema.

  • Procesamiento de XSLT.XSLT processing.

  • Análisis de cualquier flujo arbitrario de datos XML binarios proporcionados por el usuario.Parsing any arbitrary stream of user supplied binary XML data.

  • Operaciones DOM como, por ejemplo, consultas, ediciones, movimiento de subárboles entre documentos y guardado de objetos DOM.DOM operations such as querying, editing, moving sub-trees between documents, and saving DOM objects.

Si le preocupa la denegación de problemas del servicio o si trabaja con orígenes de confianza, no habilite el procesamiento de DTD.If you are concerned about denial of service issues or if you are dealing with untrusted sources, do not enable DTD processing. Esto está deshabilitado de forma predeterminada en XmlReader objetos que el XmlReader.Create método crea.This is disabled by default on XmlReader objects that the XmlReader.Create method creates.

Nota

XmlTextReader permite el procesamiento de DTD de manera predeterminada.The XmlTextReader allows DTD processing by default. Utilice la propiedad XmlTextReader.DtdProcessing para deshabilitar esta característica.Use the XmlTextReader.DtdProcessing property to disable this feature.

Si tiene habilitado el procesamiento de DTD, puede usar el XmlSecureResolver clase para restringir los recursos que la XmlReader puede tener acceso.If you have DTD processing enabled, you can use the XmlSecureResolver class to restrict the resources that the XmlReader can access. También puede diseñar la aplicación para que el procesamiento de XML es la memoria y restricciones de tiempo.You can also design your app so that the XML processing is memory and time constrained. Por ejemplo, puede configurar los límites de tiempo de espera en la aplicación ASP.NET.For example, you can configure timeout limits in your ASP.NET app.

Consideraciones de procesamientoProcessing considerations

Dado que los documentos XML pueden incluir referencias a otros archivos, resulta complicado determinar cuánta potencia de procesamiento será necesaria para analizar un documento XML.Because XML documents can include references to other files, it is difficult to determine how much processing power is required to parse an XML document. Por ejemplo, los documentos XML pueden incluir una DTD.For example, XML documents can include a DTD. Si la DTD contiene entidades anidadas o modelos de contenido complejos, podría ser necesario un tiempo de procesamiento elevado para analizar el documento.If the DTD contains nested entities or complex content models, it could take an excessive amount of time to parse the document.

Si utiliza XmlReader, puede limitar el tamaño del documento a analizar estableciendo la propiedad XmlReaderSettings.MaxCharactersInDocument.When using XmlReader, you can limit the size of the document that can be parsed by setting the XmlReaderSettings.MaxCharactersInDocument property. Puede limitar el número de caracteres que resultan de expandir las entidades estableciendo la propiedad XmlReaderSettings.MaxCharactersFromEntities.You can limit the number of characters that result from expanding entities by setting the XmlReaderSettings.MaxCharactersFromEntities property. Para ver ejemplos de cómo establecer estas propiedades, vea los temas de referencia correspondientes.See the appropriate reference topics for examples of setting these properties.

Las tecnologías XSD y XSLT tienen capacidades adicionales que pueden afectar al rendimiento del procesamiento.The XSD and XSLT technologies have additional capabilities that can affect processing performance. Por ejemplo, es posible construir un esquema XML cuyo procesamiento requiere una cantidad sustancial de tiempo cuando se evalúa en un documento relativamente pequeño.For example, it is possible to construct an XML schema that requires a substantial amount of time to process when evaluated over a relatively small document. También es posible incrustar bloques de scripts en una hoja de estilos XSLT.It is also possible to embed script blocks within an XSLT style sheet. Ambos casos suponen una amenaza de seguridad a la aplicación.Both cases pose a potential security threat to your app.

Al crear una aplicación que utiliza el XslCompiledTransform clase, debe tener en cuenta los siguientes elementos y sus implicaciones:When creating an app that uses the XslCompiledTransform class, you should be aware of the following items and their implications:

  • El script XSLT está deshabilitado de manera predeterminada.XSLT scripting is disabled by default. El script XSLT solo se debería habilitar si necesita compatibilidad con scripts o si está trabajando en un entorno de total confianza.XSLT scripting should be enabled only if you require script support and you are working in a fully trusted environment.

  • La función document() XSLT está deshabilitada de manera predeterminada.The XSLT document() function is disabled by default. Si habilita la función document(), restrinja los recursos a los que se tiene acceso pasando un objeto XmlSecureResolver al método XslCompiledTransform.Transform.If you enable the document() function, restrict the resources that can be accessed by passing an XmlSecureResolver object to the XslCompiledTransform.Transform method.

  • Los objetos de extensión están habilitados de manera predeterminada.Extension objects are enabled by default. Si se pasa un objeto XsltArgumentList que contiene objetos de extensión al método XslCompiledTransform.Transform, los objetos de extensión se utilizan.If an XsltArgumentList object that contains extension objects is passed to the XslCompiledTransform.Transform method, the extension objects are used.

  • Las hojas de estilos XLST pueden incluir referencias a otros archivos y bloques de scripts incrustados.XSLT style sheets can include references to other files and embedded script blocks. Un usuario malintencionado puede aprovecharse de esta característica para proporcionarle datos u hojas de estilos que, cuando se ejecutan, pueden hacer que el sistema los procese hasta que el equipo se quede sin recursos.A malicious user can exploit this by supplying you with data or style sheets that, when executed, can cause your system to process until the computer runs low on resources.

  • Aplicaciones XSLT que se ejecutan en un entorno de confianza mixto pueden producir suplantaciones de hoja de estilo.XSLT apps that run in a mixed trust environment can result in style sheet spoofing. Por ejemplo, un usuario malintencionado podría cargar un objeto con una hoja de estilos perjudicial y pasárselo a otro usuario que, a continuación, llama al método XslCompiledTransform.Transform y ejecuta la transformación.For example, a malicious user can load an object with a harmful style sheet and hand it off to another user who subsequently calls the XslCompiledTransform.Transform method and executes the transformation.

Estos problemas de seguridad se pueden mitigar si no se habilitan los scripts o la función document() a menos que la hoja de estilos provenga de un origen de confianza, y si no se aceptan objetos XslCompiledTransform, hojas de estilos XSLT o datos de origen XML de un origen que no es de confianza.These security issues can be mitigated by not enabling scripting or the document() function unless the style sheet comes from a trusted source, and by not accepting XslCompiledTransform objects, XSLT style sheets, or XML source data from an untrusted source.

Control de excepcionesException handling

Las excepciones producidas por componentes de nivel inferior pueden revelar información de ruta de acceso que no desea que expone a la aplicación.Exceptions thrown by lower level components can disclose path information that you do not want exposed to the app. Las aplicaciones deben detectar las excepciones y procesarlas adecuadamente.Your apps must catch exceptions and process them appropriately.