Compartir vía


System.Xml Espacio de nombres

Proporciona compatibilidad basada en estándares para procesar XML.

Clases

NameTable

Implementa XmlNameTable de un único subproceso.

UniqueId

Un identificador único optimizado para Guids.

XmlAttribute

Representa un atributo. Los valores válidos y predeterminados del atributo se definen en una definición de tipo de documento (DTD) o un esquema.

XmlAttributeCollection

Representa una colección de atributos a la que se puede acceder por nombre o índice.

XmlBinaryReaderSession

Permite administrar las cadenas optimizadas de una manera dinámica.

XmlBinaryWriterSession

Permite el uso de un diccionario dinámico para comprimir cadenas comunes que aparecen en un mensaje y mantener el estado.

XmlCDataSection

Representa una sección CDATA.

XmlCharacterData

Proporciona métodos de manipulación de texto que usan varias clases.

XmlComment

Representa el contenido de un comentario XML.

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). Cuando se convierten tipos de datos, los valores devueltos no dependen de la configuración regional.

XmlDataDocument

Permite que los datos estructurados se almacenen, recuperen y manipulen mediante un DataSet relacional.

XmlDeclaration

Representa el nodo de la declaración XML <?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).

XmlDictionaryReader

Una clase abstract de la que Windows Communication Foundation (WCF) se deriva XmlReader para hacer serialización y deserialización.

XmlDictionaryReaderQuotas

Contiene los valores de cuota configurables para XmlDictionaryReaders.

XmlDictionaryString

Representa una entrada almacenada en un XmlDictionary.

XmlDictionaryWriter

Representa una clase abstracta de la que Windows Communication Foundation (WCF) se deriva XmlWriter para hacer serialización y deserialización.

XmlDocument

Representa un documento XML. Puede usar esta clase para cargar, validar, editar, agregar y posicionar el código XML en un documento.

XmlDocumentFragment

Representa un objeto pequeño tamaño, que resulta útil para realizar operaciones de inserción de árboles.

XmlDocumentType

Representa la declaración de tipos de documento.

XmlDocumentXPathExtensions

Proporciona métodos de extensión para y para la XmlDocumentXmlNode navegación de documentos.

XmlElement

Representa un elemento.

XmlEntity

Representa una declaración de entidad, como <!ENTITY... >.

XmlEntityReference

Representa un nodo de referencia a entidad.

XmlException

Devuelve información detallada sobre la última excepción.

XmlImplementation

Define el contexto para un conjunto de objetos XmlDocument.

XmlLinkedNode

Obtiene el nodo inmediatamente anterior o siguiente a éste.

XmlNamedNodeMap

Representa una colección de nodos a la que se puede acceder por nombre o índice.

XmlNamespaceManager

Resuelve, agrega y quita los espacios de nombres de una colección, y proporciona administración de ámbito de estos espacios de nombres.

XmlNameTable

Tabla de objetos en forma de cadena subdividida.

XmlNode

Representa un único nodo en el documento XML.

XmlNodeChangedEventArgs

Proporciona datos para los eventos NodeChanged, NodeChanging, NodeInserted, NodeInserting, NodeRemoved y NodeRemoving.

XmlNodeList

Representa una colección ordenada de nodos.

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.

XmlNotation

Representa una declaración de notaciones, como <!NOTATION... >.

XmlParserContext

Proporciona toda la información de contexto que necesita el objeto XmlReader para analizar un fragmento de XML.

XmlProcessingInstruction

Representa una instrucción de procesamiento que XML define para conservar información específica del procesador en el texto del documento.

XmlQualifiedName

Representa un nombre completo XML.

XmlReader

Representa un lector que proporciona acceso rápido a datos XML, sin almacenamiento en caché y con desplazamiento solo hacia delante.

XmlReaderSettings

Especifica un conjunto de características compatibles en el objeto XmlReader creado mediante el método Create.

XmlResolver

Resuelve los recursos XML externos designados por un identificador uniforme de recursos (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.

XmlSignificantWhitespace

Representa el espacio en blanco entre marcas en un nodo de contenido mixto o espacio en blanco dentro del ámbito xml:space= "preserve". También se hace referencia a esto como espacio en blanco significativo.

XmlText

Representa el contenido de texto de un elemento o atributo.

XmlTextReader

Representa un lector que proporciona acceso rápido a datos XML, sin almacenamiento en caché y con desplazamiento solo hacia delante.

A partir de .NET Framework 2.0, se recomienda usar la clase XmlReader en su lugar.

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.

A partir de .NET Framework 2.0, se recomienda usar la clase XmlWriter en su lugar.

XmlUrlResolver

Resuelve los recursos XML externos designados por un identificador uniforme de recursos (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).

Esta clase está obsoleta. 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.

XmlWhitespace

Representa los espacios en blanco en el contenido del elemento.

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.

XmlWriterSettings

Especifica un conjunto de características compatibles en el objeto XmlWriter creado mediante el método Create.

XmlXapResolver

El tipo XmlXapResolver se usa para resolver recursos del paquete XAP de la aplicación Silverlight.

Interfaces

IApplicationResourceStreamResolver

Representa una resolución de secuencias de recursos de aplicación.

IFragmentCapableXmlDictionaryWriter

Contiene propiedades y métodos que cuando son implementados por un XmlDictionaryWriter, permiten el procesamiento de fragmentos XML.

IHasXmlNode

Permite que una clase devuelva XmlNode desde el contexto o la posición actuales.

IStreamProvider

Representa una interfaz que se puede implementar mediante clases que proporcionan secuencias.

IXmlBinaryReaderInitializer

Proporciona métodos para reinicializar un lector binario para leer un nuevo documento.

IXmlBinaryWriterInitializer

Especifica los requisitos de implementación para sistemas de escritura binarios XML que derivan de esta interfaz.

IXmlDictionary

interface que define el contrato que un diccionario Xml debe implementar para ser utilizado por XmlDictionaryReader e implementaciones XmlDictionaryWriter.

IXmlLineInfo

Proporciona una interfaz para habilitar una clase que devuelva información de línea y posición.

IXmlMtomReaderInitializer

Especifica los requisitos de implementación para los lectores de texto XML MTOM que derivan de esta interfaz.

IXmlMtomWriterInitializer

Cuando es implementada por un sistema de escritura MTOM, esta interfaz asegura la inicialización para un sistema de escritura MTOM.

IXmlNamespaceResolver

Proporciona acceso de solo lectura a un conjunto de asignaciones de prefijos y espacios de nombres.

IXmlTextReaderInitializer

Especifica los requisitos de implementación para los lectores de texto XML que derivan de esta interfaz.

IXmlTextWriterInitializer

Especifica los requisitos de implementación para los editores de texto XML que derivan de esta interfaz.

Enumeraciones

ConformanceLevel

Especifica el número de comprobaciones de entrada o de salida que realizan los objetos XmlReader y XmlWriter.

DtdProcessing

Especifica las opciones para procesar DTD. La clase DtdProcessing utiliza la enumeración XmlReaderSettings.

EntityHandling

Especifica cómo XmlTextReader o XmlValidatingReader controlan las entidades.

Formatting

Especifica las opciones de formato de XmlTextWriter.

NamespaceHandling

Especifica si se van a quitar las declaraciones de espacio de nombres duplicadas en XmlWriter.

NewLineHandling

Especifica cómo controlar los saltos de línea.

ReadState

Especifica el estado del lector.

ValidationType

Especifica el tipo de validación que se va a realizar.

WhitespaceHandling

Especifica cómo se controla el espacio en blanco.

WriteState

Especifica el estado de XmlWriter.

XmlDateTimeSerializationMode

Especifica cómo tratar el valor de tiempo al realizar una conversión entre una cadena y DateTime.

XmlDictionaryReaderQuotaTypes

Enumera los valores de cuota configurables para XmlDictionaryReaders.

XmlNamespaceScope

Define el ámbito de espacio de nombres.

XmlNodeChangedAction

Especifica el tipo de cambio de nodo.

XmlNodeOrder

Describe el orden del documento de un nodo en comparación con un segundo nodo.

XmlNodeType

Especifica el tipo de nodo.

XmlOutputMethod

Especifica el método utilizado para serializar la salida de XmlWriter.

XmlSpace

Especifica el ámbito de xml:space actual.

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.

Delegados

OnXmlDictionaryReaderClose

delegate para un método de devolución de llamada al cerrar el lector.

XmlNodeChangedEventHandler

Representa el método que controla los eventos NodeChanged, NodeChanging, NodeInserted, NodeInserting, NodeRemoved y NodeRemoving.

Comentarios

Estándares compatibles

El System.Xml espacio de nombres admite estos estándares:

Consulte la sección Diferencias de las especificaciones W3C para dos casos en los que las clases XML difieren de las recomendaciones de W3C.

.NET también proporciona otros espacios de nombres para las operaciones relacionadas con XML. Para obtener una lista, descripciones y vínculos, vea System.Xml Espacios de nombres.

Procesamiento de XML de forma asincrónica

Las System.Xml.XmlReader clases y System.Xml.XmlWriter incluyen una serie de métodos asincrónicos basados en el modelo de programación asincrónica. Estos métodos se pueden identificar mediante la cadena "Async" al final de sus nombres. Con estos métodos, puede escribir código asincrónico similar al código sincrónico y puede migrar fácilmente el código sincrónico existente a código asincrónico.

  • Use los métodos asincrónicos en las aplicaciones en las que haya una latencia de flujo de red significativa. Evite usar las API asincrónicas para la secuencia de memoria o las operaciones de lectura y escritura de secuencia de archivos locales. El flujo de entrada, XmlTextReader, y XmlTextWriter también debe admitir operaciones asincrónicas. De lo contrario, las operaciones de E/S bloquearán los subprocesos.

  • No se recomienda mezclar llamadas de función sincrónicas y asincrónicas, ya que es posible que se olvide de usar la await palabra clave o usar una API sincrónica donde sea necesaria una asincrónica.

  • No establezca la XmlReaderSettings.Async marca true o XmlWriterSettings.Async en si no pretende usar un método asincrónico.

  • Si olvida especificar la await palabra clave al llamar a un método asincrónico, los resultados no son deterministas: es posible que reciba el resultado esperado o una excepción.

  • Cuando un XmlReader objeto lee un nodo de texto grande, podría almacenar en caché solo un valor de texto parcial y devolver el nodo de texto, por lo que la recuperación de la XmlReader.Value propiedad podría estar bloqueada por una operación de E/S. Use el XmlReader.GetValueAsync método para obtener el valor de texto en modo asincrónico o use el XmlReader.ReadValueChunkAsync método para leer un bloque de texto grande en fragmentos.

  • Cuando se usa un XmlWriter objeto , llame al XmlWriter.FlushAsync método antes de llamar XmlWriter.Close a para evitar el bloqueo de una operación de E/S.

Diferencias con respecto a las especificaciones W3C

En dos casos que implican restricciones en los componentes de esquema del grupo de modelos, el System.Xml espacio de nombres difiere de las recomendaciones de W3C.

Coherencia en declaraciones de elemento:

En algunos casos, cuando se usan grupos de sustitución, la System.Xml implementación no satisface la "Restricción de componentes de esquema: coherente con declaraciones de elementos", que se describe en la sección Restricciones en componentes de esquema de grupo de modelos de la especificación W3C.

Por ejemplo, el esquema siguiente incluye elementos que tienen el mismo nombre, pero distintos tipos en el mismo modelo de contenido y se usan grupos de sustitución. Esto debería producir un error, pero System.Xml compila y valida el esquema sin errores.

<?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. 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. Este último caso daría como resultado una secuencia de dos e2 elementos, donde uno es de tipo t2 y el otro es de tipo xs:int.

Atribución única de partículas:

En las condiciones siguientes, la System.Xml implementación no satisface la "Restricción de componentes de esquema: atribución de partículas únicas", que se describe en la sección Restricciones en componentes de esquema del grupo de modelos de la especificación W3C.

  • Uno de los elementos del grupo hace referencia a otro elemento.

  • El elemento referenciado es un elemento de encabezado de un grupo de sustituciones.

  • El grupo de sustitución contiene un elemento que tiene el mismo nombre que uno de los elementos del grupo.

  • La cardinalidad del elemento que hace referencia al elemento principal del grupo de sustitución y al elemento con el mismo nombre que un elemento de grupo de sustitución no es fijo (minOccurs < maxOccurs).

  • La definición del elemento que hace referencia al grupo de sustitución precede a la definición del elemento con el mismo nombre que un elemento de grupo de sustitución.

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.

<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 XML con el esquema anterior, se producirá un error en la validación con el siguiente mensaje: "El elemento 'e3' no tiene el elemento secundario 'e2' no válido". Se producirá una XmlSchemaValidationException excepción.

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

Para solucionar este problema, puede intercambiar declaraciones de elementos en el documento XSD. Por ejemplo:

<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:

<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:

<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 XML con el esquema anterior, se producirá un error en la validación con la siguiente excepción: "Excepción no controlada: System.Xml. Schema.XmlSchemaValidationException: el elemento 'e2' el no es válido: el valor 'abc' no es válido según su tipo 'http://www.w3.org/2001/XMLSchema:int' de datos: la cadena 'abc' no es un valor Int32 válido".

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

Consideraciones de seguridad

Los tipos y miembros del System.Xml espacio de nombres se basan en el sistema de seguridad de .NET. En las secciones siguientes se describen los problemas de seguridad específicos de las tecnologías XML.

Tenga en cuenta también que, al usar los System.Xml tipos y miembros, si el XML contiene datos que tienen posibles implicaciones de privacidad, debe implementar la aplicación de forma que respete la privacidad de los usuarios finales.

Acceso externo

Hay varias tecnologías XML que tienen la capacidad de recuperar otros documentos durante el procesamiento. Por ejemplo, una definición de tipo de documento (DTD) puede residir en el documento que se está analizando. La DTD también puede encontrarse en un documento externo al que hace referencia el documento que se está analizando. 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. Estos recursos externos pueden presentar algunos problemas de seguridad. Por ejemplo, querrá asegurarse de que la aplicación recupera archivos solo de sitios de confianza y que el archivo que recupera no contiene datos malintencionados.

La XmlUrlResolver clase se usa para cargar documentos XML y para resolver recursos externos, como entidades, DTD o esquemas, e importar o incluir directivas.

Puede invalidar esta clase y especificar el XmlResolver objeto que se va a usar. Utilice la clase XmlSecureResolver si necesita abrir un recurso que no controla o que no es de confianza. XmlSecureResolver contiene un XmlResolver y le permite restringir los recursos a los que tiene acceso el XmlResolver subyacente.

Denegación de servicio

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.

  • Análisis de datos XML de texto.

  • Análisis de datos XML binarios si Microsoft SQL Server generó los datos XML binarios.

  • Escritura de fragmentos y documentos XML desde orígenes de datos al sistema de archivos, secuencias, TextWriter o 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.

  • Navegación por el objeto DOM.

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.

  • Procesamiento de DTD.

  • Procesamiento de esquemas. 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.

  • Procesamiento de XSLT.

  • Análisis de cualquier flujo arbitrario de datos XML binarios proporcionados por el usuario.

  • Operaciones DOM como, por ejemplo, consultas, ediciones, movimiento de subárboles entre documentos y guardado de objetos DOM.

Si le preocupan los problemas de denegación de servicio o si está tratando con orígenes que no son de confianza, no habilite el procesamiento de DTD. Esto está deshabilitado de forma predeterminada en XmlReader los objetos que crea el XmlReader.Create método.

Nota:

XmlTextReader permite el procesamiento de DTD de manera predeterminada. Utilice la propiedad XmlTextReader.DtdProcessing para deshabilitar esta característica.

Si tiene habilitado el procesamiento de DTD, puede usar la XmlSecureResolver clase para restringir los recursos a los que XmlReader puede acceder. También puede diseñar la aplicación para que el procesamiento XML sea memoria y tiempo restringido. Por ejemplo, puede configurar límites de tiempo de espera en la aplicación de ASP.NET.

Consideraciones sobre el procesamiento

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. Por ejemplo, los documentos XML pueden incluir una 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.

Si utiliza XmlReader, puede limitar el tamaño del documento a analizar estableciendo la propiedad XmlReaderSettings.MaxCharactersInDocument. Puede limitar el número de caracteres que resultan de expandir las entidades estableciendo la propiedad XmlReaderSettings.MaxCharactersFromEntities. Para ver ejemplos de cómo establecer estas propiedades, vea los temas de referencia correspondientes.

Las tecnologías XSD y XSLT tienen capacidades adicionales que pueden afectar al rendimiento del procesamiento. 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. También es posible incrustar bloques de scripts en una hoja de estilos XSLT. Ambos casos suponen una amenaza de seguridad potencial para la aplicación.

Al crear una aplicación que use la XslCompiledTransform clase , debe tener en cuenta los siguientes elementos y sus implicaciones:

  • El script XSLT está deshabilitado de manera predeterminada. El script XSLT solo se debería habilitar si necesita compatibilidad con scripts o si está trabajando en un entorno de total confianza.

  • La función document() XSLT está deshabilitada de manera predeterminada. Si habilita la función document(), restrinja los recursos a los que se tiene acceso pasando un objeto XmlSecureResolver al método XslCompiledTransform.Transform.

  • Los objetos de extensión están habilitados de manera predeterminada. Si se pasa un objeto XsltArgumentList que contiene objetos de extensión al método XslCompiledTransform.Transform, los objetos de extensión se utilizan.

  • Las hojas de estilos XLST pueden incluir referencias a otros archivos y bloques de scripts incrustados. 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.

  • Las aplicaciones XSLT que se ejecutan en un entorno de confianza mixta pueden dar lugar a la suplantación de hoja de estilos. 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.

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.

Control de excepciones

Las excepciones producidas por componentes de nivel inferior pueden revelar información de ruta de acceso que no desea exponer a la aplicación. Las aplicaciones deben detectar excepciones y procesarlas correctamente.

Consulte también