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
| Nombre | Description |
|---|---|
| NameTable |
Implementa un único subproceso XmlNameTable. |
| UniqueId |
Identificador único optimizado para guides. |
| XmlAttribute |
Representa un atributo . Los valores válidos y predeterminados para el atributo se definen en una definición de tipo de documento (DTD) o esquema. |
| XmlAttributeCollection |
Representa una colección de atributos a los que se puede tener acceso por nombre o índice. |
| XmlBinaryReaderSession |
Permite administrar cadenas optimizadas de forma dinámica. |
| XmlBinaryWriterSession |
Permite usar 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 para convertir entre tipos de Common Language Runtime y tipos de lenguaje de definición de esquema XML (XSD). Al convertir tipos de datos, los valores devueltos son independientes de la configuración regional. |
| XmlDataDocument |
Permite que los datos estructurados se almacenen, recuperen y manipulen a través de un objeto relacional DataSet. |
| XmlDeclaration |
Representa el nodo <de declaración XML ?xml version='1.0'...?>. |
| XmlDictionary |
Implementa un diccionario que se usa para optimizar las implementaciones de lector y escritor XML de Windows Communication Foundation (WCF). |
| XmlDictionaryReader |
Clase |
| XmlDictionaryReaderQuotas |
Contiene valores de cuota configurables para XmlDictionaryReaders. |
| XmlDictionaryString |
Representa una entrada almacenada en .XmlDictionary |
| XmlDictionaryWriter |
Representa una clase abstracta de la que Windows Communication Foundation (WCF) deriva de XmlWriter para realizar la serialización y deserialización. |
| XmlDocument |
Representa un documento XML. Puede usar esta clase para cargar, validar, editar, agregar y colocar XML en un documento. |
| XmlDocumentFragment |
Representa un objeto ligero que resulta útil para las operaciones de inserción de árbol. |
| XmlDocumentType |
Representa la declaración de tipo 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 de entidad. |
| XmlException |
Devuelve información detallada sobre la última excepción. |
| XmlImplementation |
Define el contexto de un conjunto de XmlDocument objetos. |
| XmlLinkedNode |
Obtiene el nodo inmediatamente anterior o siguiendo este nodo. |
| XmlNamedNodeMap |
Representa una colección de nodos a los que se puede acceder por nombre o índice. |
| XmlNamespaceManager |
Resuelve, agrega y quita espacios de nombres a una colección y proporciona administración de ámbitos para estos espacios de nombres. |
| XmlNameTable |
Tabla de objetos de cadena atomizados. |
| XmlNode |
Representa un único nodo en el documento XML. |
| XmlNodeChangedEventArgs |
Proporciona datos para los NodeChangedeventos , NodeChanging, NodeInserted, NodeInsertingy NodeRemovingNodeRemoved . |
| XmlNodeList |
Representa una colección ordenada de nodos. |
| XmlNodeReader |
Representa un lector que proporciona acceso rápido y no almacenado en caché solo a los datos XML de .XmlNode |
| XmlNotation |
Representa una declaración de notación, como <! NOTACIÓN... >. |
| XmlParserContext |
Proporciona toda la información de contexto necesaria para XmlReader analizar un fragmento XML. |
| XmlProcessingInstruction |
Representa una instrucción de procesamiento, que XML define para mantener 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, sin almacenamiento en caché y de solo avance a datos XML. |
| XmlReaderSettings |
Especifica un conjunto de características que se admitirán en el XmlReader objeto creado por el Create método . |
| XmlResolver |
Resuelve los recursos XML externos denominados por un identificador uniforme de recursos (URI). |
| XmlSecureResolver |
Ayuda a proteger otra implementación de XmlResolver ajustando el XmlResolver objeto y restringiendo los recursos a los que tiene acceso el subyacente XmlResolver . |
| XmlSignificantWhitespace |
Representa el espacio en blanco entre el marcado en un nodo de contenido mixto o un espacio en blanco dentro de un ámbito xml:space= 'preserve'. Esto también se conoce 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, no almacenado en caché y de solo avance a los datos XML. Se recomienda usar la XmlReader clase en su lugar. |
| XmlTextWriter |
Representa un sistema de escritura que proporciona una forma rápida, no almacenada en caché y de solo avance de generar secuencias o archivos que contengan datos XML que se ajusten al lenguaje de marcado extensible (XML) 1.0 de W3C y a los espacios de nombres en recomendaciones XML. Se recomienda usar la XmlWriter clase en su lugar. |
| XmlUrlResolver |
Resuelve los recursos XML externos denominados por un identificador uniforme de recursos (URI). |
| XmlValidatingReader |
Representa un lector que proporciona definición de tipo de documento (DTD), XML-Data esquema reducido (XDR) y validación del lenguaje de definición de esquemas XML (XSD). Esta clase está obsoleta. Se recomienda usar la XmlReaderSettings clase y el Create método para crear un lector XML de validación. |
| XmlWhitespace |
Representa el espacio en blanco en el contenido del elemento. |
| XmlWriter |
Representa un sistema de escritura que proporciona una forma rápida, no almacenada en caché y de solo avance para generar secuencias o archivos que contienen datos XML. |
| XmlWriterSettings |
Especifica un conjunto de características que se admitirán en el XmlWriter objeto creado por el Create método . |
| XmlXapResolver |
El tipo XmlXapResolver se usa para resolver recursos en el paquete XAP de la aplicación silverlight. |
Interfaces
| Nombre | Description |
|---|---|
| IApplicationResourceStreamResolver |
Representa un solucionador de flujos de recursos de aplicación. |
| IFragmentCapableXmlDictionaryWriter |
Contiene propiedades y métodos que cuando se implementan mediante , XmlDictionaryWriterpermiten el procesamiento de fragmentos XML. |
| IHasXmlNode |
Permite que una clase devuelva un XmlNode objeto desde el contexto o la posición actuales. |
| IStreamProvider |
Representa una interfaz que se puede implementar mediante clases que proporcionan flujos. |
| IXmlBinaryReaderInitializer |
Proporciona métodos para reinicializar un lector binario para leer un nuevo documento. |
| IXmlBinaryWriterInitializer |
Especifica los requisitos de implementación para los escritores binarios XML que derivan de esta interfaz. |
| IXmlDictionary |
que |
| IXmlLineInfo |
Proporciona una interfaz para permitir que una clase devuelva información de línea y posición. |
| IXmlMtomReaderInitializer |
Especifica los requisitos de implementación para los lectores MTOM XML que derivan de esta interfaz. |
| IXmlMtomWriterInitializer |
Cuando se implementa mediante un escritor MTOM, esta interfaz garantiza la inicialización de un escritor MTOM. |
| IXmlNamespaceResolver |
Proporciona acceso de solo lectura a un conjunto de asignaciones de espacios de nombres y prefijos. |
| 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 escritores de texto XML que derivan de esta interfaz. |
Enumeraciones
| Nombre | Description |
|---|---|
| ConformanceLevel |
Especifica la cantidad de entrada o salida que realizan los objetos XmlReader y XmlWriter. |
| DtdProcessing |
Especifica las opciones de procesamiento de DTD. La clase DtdProcessing usa la enumeración XmlReaderSettings. |
| EntityHandling |
Especifica cómo controla las entidades XmlTextReader o XmlValidatingReader. |
| Formatting |
Especifica las opciones de formato para el XmlTextWriter. |
| NamespaceHandling |
Especifica si se van a quitar declaraciones de espacio de nombres duplicadas en el 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 del XmlWriter. |
| XmlDateTimeSerializationMode |
Especifica cómo tratar el valor de hora al convertir entre cadena y DateTime. |
| XmlDictionaryReaderQuotaTypes |
Enumera los valores de cuota configurables para XmlDictionaryReaders. |
| XmlNamespaceScope |
Define el ámbito del espacio de nombres. |
| XmlNodeChangedAction |
Especifica el tipo de cambio de nodo. |
| XmlNodeOrder |
Describe el orden de documento de un nodo en comparación con un segundo nodo. |
| XmlNodeType |
Especifica el tipo de nodo. |
| XmlOutputMethod |
Especifica el método usado 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 determinado, por ejemplo, un tipo de sección CDATA. |
Delegados
| Nombre | Description |
|---|---|
| OnXmlDictionaryReaderClose |
|
| XmlNodeChangedEventHandler |
Representa el método que controla los NodeChangedeventos , NodeChanging, NodeInserted, NodeInsertingy NodeRemovedNodeRemoving . |
Comentarios
Estándares compatibles
El System.Xml espacio de nombres admite estos estándares:
- XML 1.0, incluida la compatibilidad con DTD
- Espacios de nombres XML, tanto en el nivel de flujo como en DOM
- Esquemas XML
- Expresiones XPath
- Transformaciones XSLT
- DOM Level 1 Core
- DOM Level 2 Core
Consulte la sección Diferencias de las especificaciones W3C para dos casos en los que las clases XML difieren de las recomendaciones de W3C.
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 donde hay 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 secuencias 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 seguirán bloqueando los subprocesos.
No se recomienda mezclar llamadas de función sincrónicas y asincrónicas, ya que es posible que olvide usar la
awaitpalabra clave o usar una API sincrónica en la que sea necesaria una asincrónica.No establezca la XmlReaderSettings.Async marca
trueo XmlWriterSettings.Async en si no pretende usar un método asincrónico.Si olvida especificar la
awaitpalabra 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 es posible que una operación de E/S bloquee la recuperación de la XmlReader.Value propiedad. 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 para evitar bloquear una operación de E/S.
Diferencias con respecto a las especificaciones W3C
En dos casos que implican restricciones en los componentes del esquema del grupo de modelos, el System.Xml espacio de nombres difiere de las recomendaciones de W3C.
Coherencia en declaraciones de elementos:
En algunos casos, cuando se usan grupos de sustitución, la System.Xml implementación no satisface la "Restricción de componente de esquema: Declaraciones de elementos coherentes", 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 tipos diferentes en el mismo modelo de contenido, y se usan grupos de sustitución. Esto debe provocar 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 dar lugar a elemento e1 de tipo t1 o en elemento e2 de tipo t2. Este último caso daría lugar a 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 componente de esquema: atribución de partículas únicas", que se describe en la sección Restricciones en componentes de esquema de grupo de modelos de la especificación W3C.
- Uno de los elementos del grupo hace referencia a otro elemento.
- El elemento al que se hace referencia es un elemento principal de un grupo de sustitución.
- 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 siguiente, el modelo de contenido es ambiguo y debe producir 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' tiene un 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 convierte en esto:
<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 elemento 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 una manera que respete la privacidad de los usuarios finales.
Acceso externo
Varias tecnologías XML 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 analiza. El DTD también puede residir 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. Use la XmlSecureResolver clase si necesita abrir un recurso que no controla o que no es de confianza. XmlSecureResolver encapsula y XmlResolver permite restringir los recursos a los que tiene acceso el subyacenteXmlResolver.
Denegación de servicio
Los siguientes escenarios se consideran menos vulnerables a los ataques de denegación de servicio porque las System.Xml clases proporcionan un medio de protección contra estos ataques.
Análisis de datos XML de texto.
Análisis de datos XML binarios si Microsoft SQL Server generó los datos XML binarios.
Escribir documentos y fragmentos XML de orígenes de datos en el sistema de archivos, secuencias, o TextWriter.StringBuilder
Cargar documentos en el objeto Document Object Model (DOM) si usa un XmlReader objeto y XmlReaderSettings.DtdProcessing se establece en DtdProcessing.Prohibit.
Navegar por el objeto DOM.
No se recomiendan los siguientes escenarios si le preocupa los ataques por denegación de servicio o si está trabajando 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 validarlo mediante un esquema que no es de confianza.
Procesamiento XSLT.
Analizar cualquier flujo arbitrario de datos XML binarios proporcionados por el usuario.
Operaciones DOM como consultar, editar, mover subárboles entre documentos y guardar objetos DOM.
Si le preocupa 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 forma predeterminada. Use la XmlTextReader.DtdProcessing propiedad para deshabilitar esta característica.
Si tiene habilitado el procesamiento dtD, puede usar la XmlSecureResolver clase para restringir los recursos a los que XmlReader puede acceder. También puede diseñar su aplicación para que el procesamiento XML esté restringido en memoria y tiempo. Por ejemplo, puede configurar límites de tiempo de espera en la aplicación de ASP.NET.
Consideraciones de procesamiento
Dado que los documentos XML pueden incluir referencias a otros archivos, es difícil determinar la cantidad de potencia de procesamiento necesaria para analizar un documento XML. Por ejemplo, los documentos XML pueden incluir un DTD. Si el DTD contiene entidades anidadas o modelos de contenido complejos, podría tardar un tiempo excesivo en analizar el documento.
Al usar XmlReader, puede limitar el tamaño del documento que se puede analizar estableciendo la XmlReaderSettings.MaxCharactersInDocument propiedad . Puede limitar el número de caracteres resultantes de expandir entidades estableciendo la XmlReaderSettings.MaxCharactersFromEntities propiedad . Consulte los temas de referencia adecuados para ver ejemplos de cómo establecer estas propiedades.
Las tecnologías XSD y XSLT tienen funcionalidades adicionales que pueden afectar al rendimiento del procesamiento. Por ejemplo, es posible construir un esquema XML que requiera una cantidad considerable de tiempo para procesarse cuando se evalúa en un documento relativamente pequeño. También es posible insertar bloques de script dentro de una hoja de estilos XSLT. Ambos casos suponen una posible amenaza de seguridad 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 scripting XSLT solo debe habilitarse si necesita compatibilidad con scripts y está trabajando en un entorno de plena confianza.
La función XSLT
document()está deshabilitada de forma predeterminada. Si habilita ladocument()función, restrinja los recursos a los que se puede acceder pasando un XmlSecureResolver objeto al XslCompiledTransform.Transform método .Los objetos de extensión están habilitados de forma predeterminada. Si se pasa un XsltArgumentList objeto que contiene objetos de extensión al XslCompiledTransform.Transform método , se usan los objetos de extensión.
Las hojas de estilos XSLT pueden incluir referencias a otros archivos y bloques de scripts incrustados. Un usuario malintencionado puede aprovechar esto proporcionando datos o hojas de estilos que, cuando se ejecuta, puede hacer que el sistema procese hasta que el equipo se ejecute bajo en recursos.
Las aplicaciones XSLT que se ejecutan en un entorno de confianza mixta pueden dar lugar a la suplantación de la hoja de estilos. Por ejemplo, un usuario malintencionado puede cargar un objeto con una hoja de estilos perjudicial y entregarlo a otro usuario que posteriormente llama al XslCompiledTransform.Transform método y ejecuta la transformación.
Estos problemas de seguridad se pueden mitigar no habilitando el scripting o la document() función a menos que la hoja de estilos proceda de un origen de confianza y no acepte XslCompiledTransform objetos, hojas de estilos XSLT o datos de origen XML de un origen que no sea 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.