System.Xml Espacio de nombres
Importante
Parte de la información hace referencia a la versión preliminar del producto, que puede haberse modificado sustancialmente antes de lanzar la versión definitiva. Microsoft no otorga ninguna garantía, explícita o implícita, con respecto a la información proporcionada aquí.
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 |
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 |
|
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 |
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 |
|
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:
Espacios de nombres XML, tanto en el nivel de flujo como en DOM
Consulte la sección Diferencias de las especificaciones W3C para dos casos en los que las clases XML difieren de las recomendaciones de W3C.
Espacios de nombres relacionados
.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óndocument()
, 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.