Compartir a través de


Información obtenida a partir de XmlNamespaceManager

Actualización: November 2007

En la tabla siguiente se muestra que, después de colocar información en XmlNamespaceManager, hay varios métodos y propiedades para realizar tareas que establecen o recuperan información.

Tarea

Métodos o propiedades

Busca el namespaceURI definido como espacio de nombres predeterminado.

Propiedad DefaultNamespace

Busca el namespaceURI declarado y que está en el ámbito de un prefijo.

Método LookupNamespace

Busca el prefijo declarado y que está en el ámbito de un namespaceURI.

Método LookupPrefix

Agrega espacios de nombres adicionales a XmlNamespaceManager.

Método AddNamespace

Quita espacios de nombres de XmlNamespaceManager.

Método RemoveNamespace

Asigna un ámbito a un espacio de nombres.

Método PushScope, Método PopScope

Comprueba si un prefijo está definido en el ámbito actual.

Método HasNamespace

Obtiene el XmlNameTable asociado con un objeto XmlNamespaceManager.

Propiedad NameTable

En el ejemplo siguiente se muestra cómo se utiliza el método LookupPrefix al escribir un atributo. El método WriteStartAttribute se utiliza para iniciar el atributo y el método LookupPrefix se utiliza para consultar el prefijo del identificador URI del espacio de nombres urn:samples; a continuación, ese prefijo se utiliza en WriteStartAttribute al escribir el atributo ISBN:

Dim prefix As String = nsMgr.LookupPrefix("urn:samples")
writer.WriteStartAttribute(prefix, "ISBN", "urn:samples")
XmlNameTable nt = new XmlNameTable();
XmlNamespaceManager nsMgr = new XmlNamespaceManager(nt);
nsMgr.AddNamespace("bk","urn:samples");string prefix = writer nsMgr.LookupPrefix("urn:samples");
writer.WriteStartAttribute(prefix, "ISBN", "urn:samples");

En el ejemplo siguiente se emplea LookupPrefix para buscar el prefijo definido en un elemento.

writer.WriteStartElement("root", "book")
writer.WriteStartElement("x", "node", "author")
s = writer.LookupPrefix("author")
CError.Compare(s, "x", "Error in nested element")
writer.WriteEndElement()
s = writer.LookupPrefix("book")
CError.Compare(s, Nothing, "Error in root element")
writer.WriteEndElement()
writer.WriteStartElement("root", "book");
writer.WriteStartElement("x", "node", "author");
s = writer.LookupPrefix("author");
CError.Compare(s, "x", "Error in nested element");
writer.WriteEndElement();
s = writer.LookupPrefix("book");
CError.Compare(s, null, "Error in root element");
writer.WriteEndElement();

Resultados

<root xmlns="book">
  <x:node xmlns:x="author" /> 
</root>

En el ejemplo siguiente se muestra cómo agregar un espacio de nombres con el método AddNamespace y cómo darle un ámbito específico con los métodos PushScope y PopScope.

Public Sub Main()
        Dim nametable As NameTable = New NameTable()
        Dim nsm As XmlNamespaceManager = New XmlNamespaceManager(nametable)
        ' Add a default namespace.
        nsm.AddNamespace(String.Empty, "www.microsoft.com")
        nsm.AddNamespace("msbooks", "www.microsoft.com/books")
        'Push the namespace scope on the stack.
        nsm.PushScope()
        nsm.AddNamespace("msstore", "www.microsoft.com/store")
        checkns(nsm)
        nsm.PopScope()
        checkns(nsm)

        Dim response As String = Console.ReadLine

End Sub

Public Sub checkns(ByVal nsm As XmlNamespaceManager)
        If nsm.HasNamespace(String.Empty) Then
            Console.WriteLine("DefaultNamespace in scope")
        Else
            Console.WriteLine("DefaultNamespace not in scope")
        End If
        If nsm.HasNamespace("msstore") Then
            Console.WriteLine("www.microsoft.com/store"" in scope")
        Else
            Console.WriteLine("www.microsoft.com/store not in scope")
        End If
        If nsm.HasNamespace("msbooks") Then
            Console.WriteLine("www.microsoft.com/books in scope")
        Else
            Console.WriteLine("www.microsoft.com/books not in scope")
        End If
End Sub
 
XmlNameTable nt = new XmlNameTable();
XmlNamespaceManager nsmanager = new XmlNamespaceManager(nt);
//Add a default namespace.
nsmanager.AddNamespace (String.Empty, "www.microsoft.com"); 
nsmanager.AddNamespace ("msbooks", "www.microsoft.com/books");
nsmanager.PushScope();
nsmanager.AddNamespace ("msstore", "www.microsoft.com/store");
checkns(nsmanager);
nsmanager.PopScope();
checkns(nsmanager);

checkns(XmlNamespaceManager nsm)
{
    if (nsm.HasNamespace(String.Empty))
        Console.WriteLine("DefaultNamespace in scope");
    else
        Console.WriteLine("DefaultNamespace not in scope");
    if (nsm.HasNamespace("msstore"))
        Console.WriteLine(""www.microsoft.com/store"" in scope");
    else
        Console.WriteLine(""www.microsoft.com/store"" not in scope");
    if (nsm.HasNamespace("msbooks"))
        Console.WriteLine(""www.microsoft.com/books"" in scope");
    else
        Console.WriteLine(""www.microsoft.com/books"" not in scope");
}

Resultados

DefaultNamespace not in scope
www.microsoft.com/store" in scope
www.microsoft.com/books not in scope
DefaultNamespace in scope
www.microsoft.com/store not in scope
www.microsoft.com/books in scope

En el ejemplo siguiente se enumeran todos los prefijos del ámbito actual, en el que se incluyen también los tres pares adicionales de espacios de nombres y prefijo. Estos tres pares se agregan automáticamente al administrador de espacios de nombres cuando se crea.

Dim nametable As NameTable = New NameTable()
Dim nsm As XmlNamespaceManager = New XmlNamespaceManager(nametable)
'Add a default namespace.
nsm.AddNamespace("xmlabc", "www.microsoft.com")
Dim prefix As String
For Each prefix In nsm
    Console.WriteLine("Namespace:{0}, Prefix:{1}", nsm.LookupNamespace(nsm.NameTable.Get(prefix)), prefix)
Next
NameTable nametable = new NameTable();
XmlNamespaceManager nsm = new XmlNamespaceManager(nametable);
//Add a default namespace.
nsm.AddNamespace("xmlabc", "www.microsoft.com"); 
foreach (String prefix in nsm)
    {
        Console.WriteLine("Namespace:{0}, Prefix:{1}",nsm.LookupNamespace(nsm.NameTable.Get(prefix)), prefix);
    }

Resultados

Namespace:http://www.w3.org/XML/1998/namespace, Prefix:xml
Namespace:http://www.w3.org/2000/xmlns/, Prefix:xmlns 
Namespace:, Prefix: 
Namespace:www.microsoft.com, Prefix:xmlabc

Vea también

Conceptos

Espacios de nombres en un documento XML

Declaraciones de espacio de nombres

Espacios de nombres predeterminados

Ámbito de declaración de espacios de nombres

Administrar espacios de nombres mediante XmlNamespaceManager