Información obtenida a partir de XmlNamespaceManager
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. |
|
Busca el namespaceURI declarado y que está en el ámbito de un prefijo. |
|
Busca el prefijo declarado y que está en el ámbito de un namespaceURI. |
|
Agrega espacios de nombres adicionales a XmlNamespaceManager. |
|
Quita espacios de nombres de XmlNamespaceManager. |
|
Asigna un ámbito a un espacio de nombres. |
|
Comprueba si un prefijo está definido en el ámbito actual. |
|
Obtiene el XmlNameTable asociado con un objeto XmlNamespaceManager. |
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);
}
Resultado
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