Sdílet prostřednictvím


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.

DefaultNamespace-Eigenschaft

Den namespaceURI suchen, der für ein Präfix deklariert wurde und im Gültigkeitsbereich liegt.

LookupNamespace-Methode

Das Präfix suchen, das für einen namespaceURI deklariert wurde und im Gültigkeitsbereich liegt.

LookupPrefix-Methode

Dem XmlNamespaceManager weitere Namespaces hinzufügen.

AddNamespace-Methode

Namespaces aus dem XmlNamespaceManager entfernen.

RemoveNamespace-Methode

Einen Gültigkeitsbereich für einen Namespace festlegen.

PushScope-Methode, PopScope-Methode

Überprüfen, ob im aktuellen Gültigkeitsbereich ein Präfix definiert ist.

HasNamespace-Methode

Die XmlNameTable abrufen, die einem XmlNamespaceManager-Objekt zugeordnet ist.

NameTable-Eigenschaft

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

Namespacedeklarationen

Standardnamespaces

Gültigkeitsbereich von Namespacedeklarationen

Verwalten von Namespaces mit dem "XmlNamespaceManager"