Compartir a través de


Administrar espacios de nombres mediante XmlNamespaceManager

Actualización: November 2007

La clase XmlNamespaceManager contiene una colección de URI de espacios de nombres y de sus prefijos. Permite resolver, agregar y eliminar espacios de nombres de una colección. En ciertos contextos puede ser necesaria para mejorar el rendimiento de procesamiento del XML. Por ejemplo, el XmlNamespaceManager lo utiliza la clase XsltContext para ofrecer compatibilidad con XPath. Si desea obtener más información acerca de la clase XsltContext, vea el artículo Q324899 de Microsoft Knowledge Base, HOW TO: Implement and Use Custom Extension Functions When You Execute XPath Queries in Visual Basic .NET.

Para consultar el mismo ejemplo en lenguaje C#, vea el artículo Q324462 de Microsoft Knowledge Base, HOW TO: Implement and Use Custom Extension Functions When You Execute XPath Queries in Visual C# .NET.

Nota:

Si está utilizando LINQ to XML, el XmlNamespaceManager no se utilizará para administrar espacios de nombres. Vea Trabajar con espacios de nombres XML para obtener información acerca de cómo administrar espacios de nombres cuando utilice LINQ to XML.

Espacios de nombres

Al crear un administrador de espacios de nombres, se agregan automáticamente tres prefijos a la clase. En la tabla siguiente se enumeran los tres prefijos y los espacios de nombres que representan.

Prefijo

Namespace

xmlns

http://www.w3.org/2000/xmlns/

xml

http://www.w3.org/XML/1998/namespace

String.Empty

Espacio de nombres vacío. Este valor se puede asignar a un prefijo. Por ejemplo, define que el espacio de nombres predeterminado es el espacio de nombres vacío.

Para agregar espacios de nombres al administrador de espacios de nombres, cree un administrador y, después, utilice el método AddNamespace. Cuado se crea el administrador de espacios de nombres, se puede utilizar NameTable de las clases XmlTextReader, XsltContext o XmlDocument. Se crea y se rellena un objeto XmlNamespaceManager personalizado con las declaraciones de espacios de nombres adecuadas mediante el método AddNamespace. Se proporciona XmlNamespaceManager como parámetro de los métodos SelectNodes o SelectSingleNode de la clase XmlDocument con el fin de ejecutar expresiones de consulta XPath que hagan referencia a elementos del espacio de nombres completo y a nombres de atributos. Cuando se agregan espacios de nombres, se supone lo siguiente:

  • Los prefijos y los espacios de nombres ya han sido comprobados, así como su compatibilidad con la especificación de espacios de nombres del W3C. El administrador de espacios de nombres no realiza ningún tipo de validación en el espacio de nombres.

  • El administrador de espacios de nombres atomiza las cadenas cuando se agregan mediante el método AddNamespace.

  • El administrador de espacios de nombres atomiza las cadenas cuando se realiza una búsqueda mediante el método LookupNamespace o LookupPrefix.

  • Al crear el administrador de espacios de nombres, se agregan automáticamente pares de prefijo y espacio de nombres predeterminados.

El administrador de espacios de nombres implementa la compatibilidad con el proceso de enumeración, además de la adición y la recuperación de espacios de nombres. Por lo tanto, puede recorrer la información guardada en el administrador de espacios de nombres mediante la construcción foreach. Suponiendo que se ha creado un administrador de espacios de nombres con el nombre nsmanager, puede recorrer en iteración la tabla mediante foreach (String prefix in nsmanager).

Dado que el administrador de espacios de nombres permite la comparación de cadenas con el prefijo y los espacios de nombres como objetos, se produce una mejora del rendimiento al utilizarlo en la comparación directa de una cadena.

Para agregar un espacio de nombres al administrador de espacios de nombres, utilice el método AddNamespace. En el ejemplo de código siguiente se muestra cómo enlazar el prefijo xsd con el URI del espacio de nombres de http://www.w3.org/2001/XMLSchema:

nsmgr.AddNamespace("xsd", "http://www.w3.org/2001/XMLSchema")
nsmgr.AddNamespace("xsd", "http://www.w3.org/2001/XMLSchema");

Ejemplo

En el siguiente ejemplo de código se muestra cómo buscar el espacio de nombres mediante el método LookupNamespace:

nsmgr.LookupNamespace("xsd")
nsmgr.LookupNamespace("xsd");

Si lo desea, puede encontrar un ejemplo más completo de cómo agregar y recuperar espacios de nombres en el método LookupNamespace.

El siguiente ejemplo crea un XmlNamespaceManager utilizando la NameTable de un lector.

Dim reader As New XmlTextReader("myfile.xml")
Dim nsmanager As New XmlNamespaceManager(reader.NameTable)
nsmanager.AddNamespace("msbooks", "www.microsoft.com/books")
nsmanager.PushScope()
nsmanager.AddNamespace("msstore", "www.microsoft.com/store")
While reader.Read()
    Console.WriteLine("Reader Prefix:{0}", reader.Prefix)
    Console.WriteLine("XmlNamespaceManager Prefix:{0}",
     nsmanager.LookupPrefix(nsmanager.NameTable.Get(reader.NamespaceURI)))
End While
XmlTextReader reader = new XmlTextReader("myfile.xml");
XmlNamespaceManager nsmanager = new XmlNamespaceManager(reader.NameTable);
nsmanager.AddNamespace("msbooks", "www.microsoft.com/books");
nsmanager.PushScope();
nsmanager.AddNamespace("msstore", "www.microsoft.com/store");
while (reader.Read())
{
    Console.WriteLine("Reader Prefix:{0}", reader.Prefix);
    Console.WriteLine("XmlNamespaceManager Prefix:{0}",
    nsmanager.LookupPrefix(nsmanager.NameTable.Get(reader.NamespaceURI)));
}

Vea también

Conceptos

Espacios de nombres en un documento XML