Share via


Verwalten von Namespaces mit dem "XmlNamespaceManager"

Aktualisiert: November 2007

Die XmlNamespaceManager-Klasse enthält eine Auflistung von Namespace-URIs und ihrer Präfixe. Mit dieser Klasse können Sie Namespaces in einer Auflistung auflösen, der Auflistung Namespaces hinzufügen und Namespaces aus ihr entfernen. Sie ist in bestimmten Kontexten erforderlich, um die Geschwindigkeit der XML-Verarbeitung zu verbessern. So wird XmlNamespaceManager z. B. von der XsltContext-Klasse verwendet, um die XPath-Unterstützung bereitzustellen. Weitere Informationen zur XsltContext-Klasse finden Sie im Microsoft Knowledge Base-Artikel mit der ID 324899, HOW TO: Implement and Use Custom Extension Functions When You Execute XPath Queries in Visual Basic .NET (nur auf Englisch verfügbar).

Das gleiche Beispiel in C# finden Sie im Microsoft Knowledge Base-Artikel mit der ID 324462, HOW TO: Implement and Use Custom Extension Functions When You Execute XPath Queries in Visual C# .NET (nur auf Englisch verfügbar).

Hinweis:

Wenn Sie LINQ to XML verwenden, wird zur Verwaltung von Namespaces nicht XmlNamespaceManager verwendet. Informationen zur Verwaltung von Namespaces bei der Verwendung von LINQ to XML finden Sie unter Arbeiten mit XML-Namespaces.

Namespaces

Wenn ein Namespace-Manager erstellt wird, werden der Klasse automatisch drei Präfixe hinzugefügt. In der folgenden Tabelle werden diese Präfixe sowie die Namespaces aufgeführt, die sie darstellen.

Präfix

Namespace

xmlns

http://www.w3.org/2000/xmlns/

xml

http://www.w3.org/XML/1998/namespace

String.Empty

Der leere Namespace. Dieser Wert kann einem Präfix zugewiesen werden. Zum Beispiel wird mit der Standardnamespace als leerer Namespace definiert.

Um dem Namespace-Manager Namespaces hinzuzufügen, erstellen Sie zunächst einen Namespace-Manager, und verwenden Sie dann die AddNamespace-Methode. Beim Erstellen des Namespace-Managers können Sie die NameTable aus der XmlTextReader-Klasse, der XsltContext-Klasse oder der XmlDocument-Klasse verwenden. Es wird ein benutzerdefiniertes XmlNamespaceManager-Objekt erstellt und mithilfe der AddNamespace-Methode mit den entsprechenden Namespacedeklarationen aufgefüllt. Der XmlNamespaceManager wird der SelectNodes-Methode bzw. SelectSingleNode der XmlDocument-Klasse als Parameter übergeben, um XPath-Abfrageausdrücke auszuführen, die auf namespacequalifizierte Element- und Attributnamen verweisen. Beim Hinzufügen von Namespaces wird von den folgenden Annahmen ausgegangen:

  • Präfixe und Namespaces sind bereits geprüft worden und entsprechen der W3C-Spezifikation für Namespaces. Der Namespace-Manager führt keine Validierung für den Namespace durch.

  • Der Namespace-Manager atomisiert die Zeichenfolgen, wenn sie mit der AddNamespace-Methode hinzugefügt werden.

  • Der Namespace-Manager atomisiert die Zeichenfolgen, wenn mit der LookupNamespace-Methode oder der LookupPrefix-Methode eine Suche durchgeführt wird.

  • Dem Namespace-Manager werden beim Erstellen automatisch Standardpaare aus Präfix und Namespace hinzugefügt.

Der Namespace-Manager unterstützt Enumerationen sowie das Hinzufügen und Abrufen von Namespaces. Mithilfe des foreach-Konstrukts können die im Namespace-Manager gespeicherten Informationen durchlaufen werden. Sofern ein Namespace-Manager mit dem Namen nsmanager erstellt wurde, können Sie die Tabelle mit foreach (String prefix in nsmanager) durchlaufen.

Da der Namespace-Manager einen Zeichenfolgenvergleich mit dem Präfix und den Namespaces als Objekte bereitstellt, kann durch Verwendung des Namespace-Managers anstelle des direkten Zeichenfolgenvergleichs eine Leistungssteigerung erzielt werden.

Verwenden Sie die AddNamespace-Methode, um dem Namespace-Manager einen Namespace hinzuzufügen. Das folgende Codebeispiel veranschaulicht, wie das Präfix xsd an den Namespace-URI von http://www.w3.org/2001/XMLSchema gebunden wird:

nsmgr.AddNamespace("xsd", "http://www.w3.org/2001/XMLSchema")
nsmgr.AddNamespace("xsd", "http://www.w3.org/2001/XMLSchema");

Beispiel

Im folgenden Codebeispiel wird gezeigt, wie Sie mit der LookupNamespace-Methode den Namespace ermitteln können:

nsmgr.LookupNamespace("xsd")
nsmgr.LookupNamespace("xsd");

Ein ausführlicheres Beispiel für das Hinzufügen und Abrufen von Namespaces finden Sie unter der LookupNamespace-Methode.

Im folgenden Beispiel wird mit der NameTable aus einem Reader ein XmlNamespaceManager erstellt.

Dim reader As New XmlTextReader("myfile.xml")
Dim nsmanager As New XmlNamespaceManager(reader.NameTable)
nsmanager.AddNamespace("msbooks", "www.microsoft.com/books")
nsmanager.PushScope()
nsmanager.AddNamespace("msstore", "www.microsoft.com/store")
While reader.Read()
    Console.WriteLine("Reader Prefix:{0}", reader.Prefix)
    Console.WriteLine("XmlNamespaceManager Prefix:{0}",
     nsmanager.LookupPrefix(nsmanager.NameTable.Get(reader.NamespaceURI)))
End While
XmlTextReader reader = new XmlTextReader("myfile.xml");
XmlNamespaceManager nsmanager = new XmlNamespaceManager(reader.NameTable);
nsmanager.AddNamespace("msbooks", "www.microsoft.com/books");
nsmanager.PushScope();
nsmanager.AddNamespace("msstore", "www.microsoft.com/store");
while (reader.Read())
{
    Console.WriteLine("Reader Prefix:{0}", reader.Prefix);
    Console.WriteLine("XmlNamespaceManager Prefix:{0}",
    nsmanager.LookupPrefix(nsmanager.NameTable.Get(reader.NamespaceURI)));
}

Siehe auch

Konzepte

Namespaces in einem XML-Dokument