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. |
|
Recherche le NamespaceURI déclaré et dans la portée pour un préfixe. |
|
Recherche le préfixe déclaré et dans la portée pour un NamespaceURI. |
|
Ajoute d'autres espaces de noms à XmlNamespaceManager. |
|
Supprime des espaces de noms de XmlNamespaceManager. |
|
Définit la portée d'un espace de noms. |
|
Vérifie si un préfixe est défini dans la portée actuelle. |
|
Obtient le XmlNameTable associé à un objet XmlNamespaceManager. |
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