Kommentar
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
Anmärkning
Den här artikeln innehåller ytterligare kommentarer till referensdokumentationen för det här API:et.
XML-namn innehåller ett namnområde och ett lokalt namn. Ett fullständigt kvalificerat namn är kombinationen av namnområdet och det lokala namnet.
Skapa ett XName-objekt
XName innehåller inga offentliga konstruktorer. I stället ger den här klassen en implicit konvertering från String som gör att du kan skapa en XName. Det vanligaste stället du använder den här konverteringen är när du skapar ett element eller attribut: Det första argumentet för XElement konstruktorn är en XName. Genom att skicka en sträng drar du nytta av den implicita konverteringen. Följande kod skapar ett element med ett namn som inte finns i något namnområde:
XElement root = new XElement("ElementName", "content");
Console.WriteLine(root);
I Visual Basic är det lämpligare att använda XML-literaler:
Dim root As XElement = <ElementName>content</ElementName>
Console.WriteLine(root)
Det här exemplet genererar följande utdata:
<ElementName>content</ElementName>
När du tilldelar en sträng till en XName används den implicita konverteringen från String.
Visual Basic-exemplet skapar XElement med hjälp av XML-literaler. Även om XML-literaler används skapas ett XName objekt för XElement.
Dessutom kan du anropa Get metoden för ett XName objekt. Det rekommenderade sättet är dock att använda implicit konvertering från sträng.
Skapa ett XName i ett namnområde
Precis som med XML kan en XName finnas i ett namnområde, eller så kan den inte finnas i något namnområde.
För C#är den rekommenderade metoden för att skapa en XName i ett namnområde att deklarera XNamespace objektet och sedan använda åsidosättningen av additionsoperatorn.
För Visual Basic är den rekommenderade metoden att använda XML-literaler och globala namnområdesdeklarationer för att skapa XML som finns i ett namnområde.
XNamespace aw = "http://www.adventure-works.com";
XElement root = new XElement(aw + "ElementName", "content");
Console.WriteLine(root);
Imports <xmlns="http://www.adventure-works.com">
Module Module1
Sub Main()
Dim root As XElement = <ElementName>content</ElementName>
Console.WriteLine(root)
End Sub
End Module
Det här exemplet genererar följande utdata:
<ElementName xmlns="http://www.adventure-works.com">content</ElementName>
Skapa ett XName utan namnområde
Egenskapen Namespace för ett XName objekt är garanterad att inte vara null. Om XName är i inget namnområde, kommer Namespace-egenskapen att ställas in på None. Följande kod visar detta:
XElement root = new XElement("ElementName", "content");
if (root.Name.Namespace == XNamespace.None)
Console.WriteLine("The element is in no namespace.");
else
Console.WriteLine("The element is in a namespace.");
Dim root As XElement = <ElementName>content</ElementName>
If (root.Name.Namespace Is XNamespace.None) Then
Console.WriteLine("The element is in no namespace.")
Else
Console.WriteLine("The element is in a namespace.")
End If
Det här exemplet genererar följande utdata:
The element is in no namespace.
Använda expanderade namn
Du kan också skapa ett XName från ett expanderat XML-namn i formuläret {namespace}localname:
XElement root = new XElement("{http://www.adventure-works.com}ElementName", "content");
Console.WriteLine(root);
Dim root As XElement = New XElement("{http://www.adventure-works.com}ElementName", "content")
Console.WriteLine(root)
Det här exemplet genererar följande utdata:
<ElementName xmlns="http://www.adventure-works.com">content</ElementName>
Tänk på att det är mindre effektivt att skapa ett XName via ett expanderat namn än att skapa ett XNamespace objekt och använda åsidosättningen av additionsoperatorn. Det är också mindre effektivt än att importera ett globalt namnområde och använda XML-literaler i Visual Basic.
Om du skapar ett XName med ett utökat namn måste LINQ till XML hitta den atomiserade instansen av ett namnområde. Det här arbetet måste upprepas för varje användning av ett expanderat namn. Den här ytterligare tiden är sannolikt försumbar när du skriver LINQ-frågor. Det kan dock vara viktigt när du skapar ett stort XML-träd.
XName-objekt atomiseras
XName objekt är garanterade att atomiseras; Om två XName objekt har exakt samma namnområde och exakt samma lokala namn, delar de samma instans. Likhets- och jämförelseoperatorerna tillhandahålls också uttryckligen för detta ändamål.
Den här funktionen medför bland annat snabbare genomförande av frågor. När du filtrerar på namnet på element eller attribut använder jämförelserna som uttrycks i predikat identitetsjämförelse, inte värdejämförelse. Det går mycket snabbare att fastställa att två referenser faktiskt refererar till samma objekt än att jämföra två strängar.