Gestione degli spazi dei nomi con XmlNamespaceManager
La classe XmlNamespaceManager contiene una raccolta di URI dello spazio dei nomi URI e i relativi prefissi e consente di risolvere, aggiungere e rimuovere spazi dei nomi da una raccolta. Viene richiesta in determinati contesti per migliorare le prestazioni di elaborazione del codice XML. Ad esempio, la classe XmlNamespaceManager viene utilizzata dalla classe XsltContext per fornire il supporto XPath. Per ulteriori informazioni sulla classe XsltContext, vedere l'articolo Q324899 della Microsoft Knowledge Base, HOW TO: Implement and Use Custom Extension Functions When You Execute XPath Queries in Visual Basic .NET (informazioni in lingua inglese).
Per lo stesso esempio relativo al linguaggio C#, vedere l'articolo Q324462 della Microsoft Knowledge Base, HOW TO: Implement and Use Custom Extension Functions When You Execute XPath Queries in Visual C# .NET (informazioni in lingua inglese).
![]() |
---|
Se si utilizza LINQ to XML, la classe XmlNamespaceManager non viene utilizzata per gestire spazi dei nomi.Per informazioni sulla gestione di spazi dei nomi quando si utilizza LINQ to XML, vedere Working with XML Namespaces. |
Spazi dei nomi
Quando si crea un gestore dello spazio dei nomi, vengono aggiunti automaticamente tre prefissi alla classe. Nella tabella seguente vengono elencati questi tre prefissi e gli spazi dei nomi che rappresentano.
Prefisso |
Spazio dei nomi |
---|---|
xmlns |
http://www.w3.org/2000/xmlns/ |
xml |
http://www.w3.org/XML/1998/namespace |
String.Empty |
Lo spazio dei nomi vuoto. È possibile assegnare questo valore a un prefisso. Ad esempio, stabilisce che lo spazio dei nomi predefinito sia lo spazio dei nomi vuoto. |
Per aggiungere spazi dei nomi al gestore dello spazio dei nomi, creare un gestore e quindi utilizzare il metodo AddNamespace. Quando si crea il gestore dello spazio dei nomi, è possibile utilizzare NameTable dalle classi XmlTextReader, XsltContext o XmlDocument. Viene creato un oggetto XmlNamespaceManager personalizzato che viene compilato con le dichiarazioni degli spazi dei nomi appropriate utilizzando il metodo AddNamespace. La classe XmlNamespaceManager viene fornita come parametro dei metodi SelectNodes o SelectSingleNode della classe XmlDocument per eseguire espressioni XPath che fanno riferimento a nomi di attributi ed elementi qualificati in base allo spazio dei nomi. Quando vengono aggiunti gli spazi dei nomi si presuppone che:
I prefissi e gli spazi dei nomi siano già stati verificati e siano conformi alla specifica W3C per gli spazi dei nomi. Non venga eseguita alcuna convalida sullo spazio dei nomi da parte del gestore dello spazio dei nomi.
Le stringhe vengano suddivise negli elementi di base dal gestore dello spazio dei nomi quando vengono aggiunte tramite il metodo AddNamespace.
Le stringhe vengano suddivise negli elementi di base dal gestore dello spazio dei nomi quando viene eseguita una ricerca utilizzando il metodo LookupNamespace o LookupPrefix.
Coppie di prefissi e spazi dei nomi predefiniti vengano aggiunte automaticamente al gestore dello spazio dei nomi al momento della creazione.
Il gestore dello spazio dei nomi consente di implementare il supporto dell'enumerazione, oltre ad aggiungere e a recuperare gli spazi dei nomi. È possibile scorrere in ciclo le informazioni salvate nel gestore dello spazio dei nomi utilizzando il costrutto foreach. Se, per ipotesi, un gestore dello spazio dei nomi è stato creato con il nome nsmanager, è possibile scorrere la tabella utilizzando foreach (String prefix in nsmanager).
Poiché il gestore dello spazio dei nomi fornisce un confronto di stringhe in cui il prefisso e gli spazi dei nomi sono trattati come oggetti, il suo utilizzo migliora le prestazioni rispetto all'utilizzo del confronto diretto di una stringa.
Per aggiungere uno spazio dei nomi al gestore dello spazio dei nomi, utilizzare il metodo AddNamespace. Nel seguente esempio di codice viene illustrato come associare il prefisso xsd all'URI dello spazio dei nomi di http://www.w3.org/2001/XMLSchema:
nsmgr.AddNamespace("xsd", "http://www.w3.org/2001/XMLSchema")
nsmgr.AddNamespace("xsd", "http://www.w3.org/2001/XMLSchema");
Esempio
Nel seguente esempio di codice viene illustrato come individuare lo spazio dei nomi tramite il metodo LookupNamespace:
nsmgr.LookupNamespace("xsd")
nsmgr.LookupNamespace("xsd");
Per un esempio completo sull'aggiunta e sul recupero degli spazi dei nomi, vedere il metodo LookupNamespace.
Nell'esempio seguente viene creato un oggetto XmlNamespaceManager, utilizzando NameTable da un lettore.
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)));
}