System.Xml.Linq.XNamespace, klasa
Ten artykuł zawiera dodatkowe uwagi dotyczące dokumentacji referencyjnej dla tego interfejsu API.
Ta klasa reprezentuje konstrukcję XML przestrzeni nazw.
Każdy XName element zawiera element XNamespace. Nawet jeśli element nie znajduje się w przestrzeni nazw, element XName nadal zawiera przestrzeń nazw . XNamespace.None Właściwość XName.Namespace ma gwarancję, że nie ma wartości null
.
Tworzenie obiektu XNamespace
Najczęstszym sposobem utworzenia XNamespace obiektu jest po prostu przypisanie do niego ciągu. Następnie można połączyć przestrzeń nazw z nazwą lokalną przy użyciu zastąpienia operatora dodawania. W poniższym przykładzie pokazano ten idiom:
XNamespace aw = "http://www.adventure-works.com";
XElement root = new XElement(aw + "Root", "Content");
Console.WriteLine(root);
Dim aw As XNamespace = "http://www.adventure-works.com"
Dim root As XElement = New XElement(aw + "Root", "Content")
Console.WriteLine(root)
Jednak w Visual Basic zazwyczaj deklaruje się globalną domyślną przestrzeń nazw w następujący sposób:
Imports <xmlns='http://www.adventure-works.com'>
Module Module1
Sub Main()
Dim root As XElement = _
<Root>Content</Root>
Console.WriteLine(root)
End Sub
End Module
Ten przykład generuje następujące wyniki:
<Root xmlns="http://www.adventure-works.com">Content</Root>
Przypisywanie ciągu do XNamespace obiektu używa niejawnej konwersji z String.
Aby uzyskać więcej informacji i przykładów, zobacz Jak utworzyć dokument z przestrzeniami nazw w języku C# (LINQ to XML).
Aby uzyskać więcej informacji na temat używania przestrzeni nazw w języku Visual Basic, zobacz Praca z przestrzeniami nazw XML.
Kontrolka prefiksów przestrzeni nazw
Jeśli utworzysz atrybut, który deklaruje przestrzeń nazw, prefiks określony w atrybucie będzie utrwalany w serializowanym formacie XML. Aby utworzyć atrybut, który deklaruje przestrzeń nazw z prefiksem, należy utworzyć atrybut, w którym przestrzeń nazw nazwy atrybutu to Xmlns, a nazwa atrybutu jest prefiksem przestrzeni nazw. Wartość atrybutu to identyfikator URI przestrzeni nazw. W poniższym przykładzie pokazano ten idiom:
XNamespace aw = "http://www.adventure-works.com";
XElement root = new XElement(aw + "Root",
new XAttribute(XNamespace.Xmlns + "aw", "http://www.adventure-works.com"),
"Content");
Console.WriteLine(root);
Dim aw As XNamespace = "http://www.adventure-works.com"
Dim root As XElement = New XElement(aw + "Root", _
New XAttribute(XNamespace.Xmlns + "aw", "http://www.adventure-works.com"), _
"Content")
Console.WriteLine(root)
W języku Visual Basic zamiast tworzyć węzeł przestrzeni nazw do kontrolowania prefiksów przestrzeni nazw, zwykle należy użyć globalnej deklaracji przestrzeni nazw:
Imports <xmlns:aw='http://www.adventure-works.com'>
Module Module1
Sub Main()
Dim root As XElement = _
<aw:Root>Content</aw:Root>
Console.WriteLine(root)
End Sub
End Module
Ten przykład generuje następujące wyniki:
<aw:Root xmlns:aw="http://www.adventure-works.com">Content</aw:Root>
Aby uzyskać więcej informacji, zobacz Jak kontrolować prefiksy przestrzeni nazw.
Tworzenie domyślnej przestrzeni nazw
Podczas konstruowania atrybutu, który będzie przestrzenią nazw, jeśli nazwa atrybutu ma specjalną wartość "xmlns", po serializacji drzewa XML przestrzeń nazw zostanie zadeklarowana jako domyślna przestrzeń nazw. Specjalny atrybut o nazwie "xmlns" nie znajduje się w żadnej przestrzeni nazw. Wartość atrybutu to identyfikator URI przestrzeni nazw.
Poniższy przykład tworzy drzewo XML zawierające atrybut zadeklarowany w taki sposób, że przestrzeń nazw stanie się domyślną przestrzenią nazw:
XNamespace aw = "http://www.adventure-works.com";
XElement root = new XElement(aw + "Root",
new XAttribute("xmlns", "http://www.adventure-works.com"),
new XElement(aw + "Child", "content")
);
Console.WriteLine(root);
Dim aw As XNamespace = "http://www.adventure-works.com"
Dim root As XElement = New XElement(aw + "Root", _
New XAttribute("xmlns", "http://www.adventure-works.com"), _
New XElement(aw + "Child", "content") _
)
Console.WriteLine(root)
W języku Visual Basic zamiast tworzyć węzeł przestrzeni nazw w celu utworzenia domyślnej przestrzeni nazw, zazwyczaj używa się globalnej domyślnej deklaracji przestrzeni nazw:
Imports <xmlns='http://www.adventure-works.com'>
Module Module1
Sub Main()
Dim root As XElement = _
<Root>
<Child>content</Child>
</Root>
Console.WriteLine(root)
End Sub
End Module
Ten przykład generuje następujące wyniki:
<Root xmlns="http://www.adventure-works.com">
<Child>content</Child>
</Root>
Atomizacja przestrzeni XNamespace
XNamespace gwarantowane jest atomizację obiektów; oznacza to, że jeśli dwa XNamespace obiekty mają dokładnie ten sam identyfikator URI, będą współdzielić to samo wystąpienie. Operatory równości i porównania są jawnie udostępniane w tym celu.
Używanie rozszerzonych nazw
Innym sposobem określenia przestrzeni nazw i nazwy lokalnej jest użycie rozszerzonej nazwy w formularzu {namespace}name
:
XElement e = new XElement("{http://www.adventure-works.com}Root",
new XAttribute("{http://www.adventure-works.com}Att", "content")
);
Console.WriteLine(e);
Dim e As XElement = New XElement("{http://www.adventure-works.com}Root", _
New XAttribute("{http://www.adventure-works.com}Att", "content") _
)
Console.WriteLine(e)
Ten przykład generuje następujące wyniki:
<Root p1:Att="content" xmlns:p1="http://www.adventure-works.com" xmlns="http://www.adventure-works.com" />
Takie podejście ma wpływ na wydajność. Za każdym razem, gdy przekazujesz ciąg zawierający rozszerzoną nazwę LINQ to XML, musi on przeanalizować nazwę, znaleźć atomyzowaną przestrzeń nazw i znaleźć atomyzowaną nazwę. Ten proces zajmuje czas procesora CPU. Jeśli wydajność jest ważna, warto użyć innego podejścia.
W języku Visual Basic zalecaną metodą jest użycie literałów XML, które nie obejmują używania rozszerzonych nazw.