Vom "XmlNamespaceManager" erhaltene Informationen
Aktualisiert: November 2007
Wie in der folgenden Tabelle dargestellt wird, sind nach dem Einlesen von Informationen in den XmlNamespaceManager verschiedene Methoden und Eigenschaften für die Ausführung von Vorgängen verfügbar, bei denen Informationen festgelegt oder abgerufen werden.
Aufgabe |
Methoden oder Eigenschaften |
---|---|
Den namespaceURI suchen, der als Standardnamespace definiert wurde. |
|
Den namespaceURI suchen, der für ein Präfix deklariert wurde und im Gültigkeitsbereich liegt. |
|
Das Präfix suchen, das für einen namespaceURI deklariert wurde und im Gültigkeitsbereich liegt. |
|
Dem XmlNamespaceManager weitere Namespaces hinzufügen. |
|
Namespaces aus dem XmlNamespaceManager entfernen. |
|
Einen Gültigkeitsbereich für einen Namespace festlegen. |
|
Überprüfen, ob im aktuellen Gültigkeitsbereich ein Präfix definiert ist. |
|
Die XmlNameTable abrufen, die einem XmlNamespaceManager-Objekt zugeordnet ist. |
Im folgenden Beispiel wird die Verwendung der LookupPrefix-Methode beim Schreiben eines Attributs dargestellt. Dabei wird mit der WriteStartAttribute-Methode das Attribut gestartet, dann wird das Präfix für den urn:samples-namespaceURI mit LookupPrefix nachgeschlagen, und anschließend wird dieses Präfix im WriteStartAttribute verwendet, wenn das ISBN-Attribut geschrieben wird:
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");
Im folgenden Beispiel wird mit LookupPrefix das Präfix gesucht, das für ein Element definiert ist.
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();
Ausgabe
<root xmlns="book">
<x:node xmlns:x="author" />
</root>
Im folgenden Beispiel wird dargestellt, wie ein Namespace mit der AddNamespace-Methode hinzugefügt und diesem mit der PushScope-Methode und der PopScope-Methode ein bestimmter Gültigkeitsbereich gegeben wird.
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");
}
Ausgabe
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
Im folgenden Beispiel werden alle Präfixe im aktuellen Gültigkeitsbereich aufgelistet, wobei auch die zusätzlichen drei Namespace-Präfix-Paare aufgezählt werden. Diese drei standardmäßigen Namespace-Präfix-Paare werden dem Namespace-Manager bei der Erstellung automatisch hinzugefügt.
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);
}
Ausgabe
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
Siehe auch
Konzepte
Namespaces in einem XML-Dokument