Partager via


Informations obtenues de XmlNamespaceManager

Le tableau suivant montre que, dès que des informations ont été placées dans XmlNamespaceManager, plusieurs méthodes et propriétés sont disponibles pour effectuer des tâches de définition ou d'extraction d'informations.

Tâche

Méthodes ou propriétés

Recherche le NamespaceURI défini comme l'espace de noms par défaut.

Propriété DefaultNamespace

Recherche le NamespaceURI déclaré et dans la portée pour un préfixe.

Méthode LookupNamespace

Recherche le préfixe déclaré et dans la portée pour un NamespaceURI.

Méthode LookupPrefix

Ajoute d'autres espaces de noms à XmlNamespaceManager.

Méthode AddNamespace

Supprime des espaces de noms de XmlNamespaceManager.

Méthode RemoveNamespace

Définit la portée d'un espace de noms.

Méthode PushScope, méthode PopScope

Vérifie si un préfixe est défini dans la portée actuelle.

Méthode HasNamespace

Obtient le XmlNameTable associé à un objet XmlNamespaceManager.

Propriété NameTable

L'exemple suivant montre comment la méthode LookupPrefix est utilisée lors de l'écriture d'un attribut. Il utilise la méthode WriteStartAttribute pour démarrer l'attribut et LookupPrefix pour rechercher le préfixe du NamespaceURI urn:samples, puis il se sert de ce préfixe dans WriteStartAttribute lors de l'écriture de l'attribut 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");

L'exemple suivant utilise LookupPrefix pour rechercher le préfixe défini sur un élément.

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();

Sortie

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

L'exemple suivant illustre l'ajout d'un espace de noms à l'aide de la méthode AddNamespace et l'assignation d'une portée spécifique à cet espace de noms au moyen des méthodes PushScope et 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");
}

Sortie

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

L'exemple suivant énumère tous les préfixes de la portée actuelle, qui répertorie également les trois autres paires espace de noms/préfixe. Ces trois paires espace de noms/préfixe par défaut sont automatiquement ajoutées au gestionnaire d'espaces de noms au moment de la création.

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);
    }

Output

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

Voir aussi

Concepts

Espaces de noms dans un document XML

Déclarations d'espaces de noms

Espaces de noms par défaut

Portée d'une déclaration d'espace de noms

Gestion des espaces de noms à l'aide de XmlNamespaceManager