Dela via


Översikt över LINQ till XML

LINQ till XML tillhandahåller ett minnesinternt XML-programmeringsgränssnitt som använder LINQ-ramverket (.NET Language-Integrated Query). LINQ till XML använder .NET-funktioner och är jämförbart med ett uppdaterat, omdesignat XML-programmeringsgränssnitt för dokumentobjektmodell (DOM).

XML har använts i stor utsträckning som ett sätt att formatera data i många sammanhang. Du kan till exempel hitta XML på webben, i konfigurationsfiler, i Microsoft Office Word-filer och i databaser.

LINQ till XML är en uppdaterad, omdesignad metod för programmering med XML. Den innehåller minnesinterna funktioner för dokumentändring i dokumentobjektmodellen (DOM) och stöder LINQ-frågeuttryck. Även om dessa frågeuttryck skiljer sig syntaktiskt från XPath ger de liknande funktioner.

LINQ till XML-utvecklare

LINQ till XML riktar sig till en mängd olika utvecklare. För en genomsnittlig utvecklare som bara vill få något gjort gör LINQ till XML XML enklare genom att tillhandahålla en frågeupplevelse som liknar SQL. Med bara lite studier kan programmerare lära sig att skriva kortfattade och kraftfulla frågor i valfritt programmeringsspråk.

Professionella utvecklare kan använda LINQ till XML för att öka produktiviteten avsevärt. Med LINQ till XML kan de skriva mindre kod som är mer uttrycksfull, mer kompakt och kraftfullare. De kan använda frågeuttryck från flera datadomäner samtidigt.

LINQ till XML är ett XML-programmeringsgränssnitt

LINQ till XML är ett LINQ-aktiverat, minnesinternt XML-programmeringsgränssnitt som gör att du kan arbeta med XML inifrån .NET-programmeringsspråken.

LINQ till XML liknar dokumentobjektmodellen (DOM) i och med att XML-dokumentet förs in i minnet. Du kan fråga och ändra dokumentet, och när du har modifierat det kan du spara det i en fil eller serialisera det och skicka det via Internet. LINQ till XML skiljer sig dock från DOM:

  • Det ger en ny objektmodell som är lättare att arbeta med.
  • Den drar nytta av språkfunktionerna i C# och Visual Basic.

Den viktigaste fördelen med LINQ till XML är dess integrering med Language-Integrated Query (LINQ). Med den här integreringen kan du skriva frågor i det minnesinterna XML-dokumentet för att hämta samlingar med element och attribut. Frågefunktionen för LINQ till XML är jämförbar i funktioner (men inte i syntaxen) med XPath och XQuery. Integreringen av LINQ i C# och Visual Basic ger starkare typning, kompileringstidskontroll och förbättrat felsökningsstöd.

En annan fördel med LINQ till XML är möjligheten att använda frågeresultat som parametrar till XElement och XAttribute objektkonstruktorer möjliggör en kraftfull metod för att skapa XML-träd. Med den här metoden, som kallas funktionell konstruktion, kan utvecklare enkelt transformera XML-träd från en form till en annan.

Du kan till exempel ha en typisk XML-inköpsorder enligt beskrivningen i XML-exempelfilen: Typisk inköpsorder. Genom att använda LINQ till XML kan du köra följande fråga för att hämta artikelnummerattributvärdet för varje objektelement i inköpsordern:

// Load the XML file from our project directory containing the purchase orders
var filename = "PurchaseOrder.xml";
var currentDirectory = Directory.GetCurrentDirectory();
var purchaseOrderFilepath = Path.Combine(currentDirectory, filename);

XElement purchaseOrder = XElement.Load(purchaseOrderFilepath);

IEnumerable<string> partNos =  from item in purchaseOrder.Descendants("Item")
                               select (string) item.Attribute("PartNumber");
' Load the XML file from our project directory containing the purchase orders
Dim filename = "PurchaseOrder.xml"
Dim currentDirectory = Directory.GetCurrentDirectory()
Dim purchaseOrderFilepath = Path.Combine(currentDirectory, filename)

Dim purchaseOrder As XElement = XElement.Load(purchaseOrderFilepath)

Dim partNos = _
    From item In purchaseOrder...<Item> _
    Select item.@PartNumber

I C# kan detta skrivas om i metodsyntaxform:

IEnumerable<string> partNos = purchaseOrder.Descendants("Item").Select(x => (string) x.Attribute("PartNumber"));

Som ett annat exempel kanske du vill ha en lista, sorterad efter artikelnummer, för objekten med ett värde som är större än 100 USD. Om du vill hämta den här informationen kan du köra följande fråga:

// Load the XML file from our project directory containing the purchase orders
var filename = "PurchaseOrder.xml";
var currentDirectory = Directory.GetCurrentDirectory();
var purchaseOrderFilepath = Path.Combine(currentDirectory, filename);

XElement purchaseOrder = XElement.Load(purchaseOrderFilepath);

IEnumerable<XElement> pricesByPartNos =  from item in purchaseOrder.Descendants("Item")
                                 where (int) item.Element("Quantity") * (decimal) item.Element("USPrice") > 100
                                 orderby (string)item.Element("PartNumber")
                                 select item;
' Load the XML file from our project directory containing the purchase orders
Dim filename = "PurchaseOrder.xml"
Dim currentDirectory = Directory.GetCurrentDirectory()
Dim purchaseOrderFilepath = Path.Combine(currentDirectory, filename)

Dim purchaseOrder As XElement = XElement.Load(purchaseOrderFilepath)

Dim partNos = _
From item In purchaseOrder...<Item> _
Where (item.<Quantity>.Value * _
       item.<USPrice>.Value) > 100 _
Order By item.<PartNumber>.Value _
Select item

I C# kan detta skrivas om i metodsyntaxform:

IEnumerable<XElement> pricesByPartNos = purchaseOrder.Descendants("Item")
                                        .Where(item => (int)item.Element("Quantity") * (decimal)item.Element("USPrice") > 100)
                                        .OrderBy(order => order.Element("PartNumber"));

Utöver dessa LINQ-funktioner tillhandahåller LINQ till XML ett förbättrat XML-programmeringsgränssnitt. Med LINQ till XML kan du:

  • Läs in XML från filer eller strömmar.
  • Serialisera XML till filer eller strömmar.
  • Skapa XML från grunden med hjälp av funktionell konstruktion.
  • Fråga XML med hjälp av XPath-liknande axlar.
  • Ändra det minnesinterna XML-trädet med hjälp av metoder som Add, Remove, ReplaceWithoch SetValue.
  • Verifiera XML-träd med XSD.
  • Använd en kombination av dessa funktioner för att omvandla XML-träd från en form till en annan.

Skapa XML-träd

En av de viktigaste fördelarna med programmering med LINQ till XML är att det är enkelt att skapa XML-träd. Om du till exempel vill skapa ett litet XML-träd kan du skriva kod på följande sätt:

XElement contacts =
new XElement("Contacts",
    new XElement("Contact",
        new XElement("Name", "Patrick Hines"),
        new XElement("Phone", "206-555-0144",
            new XAttribute("Type", "Home")),
        new XElement("phone", "425-555-0145",
            new XAttribute("Type", "Work")),
        new XElement("Address",
            new XElement("Street1", "123 Main St"),
            new XElement("City", "Mercer Island"),
            new XElement("State", "WA"),
            new XElement("Postal", "68042")
        )
    )
);
Dim contacts As XElement = _
    <Contacts>
        <Contact>
            <Name>Patrick Hines</Name>
            <Phone>206-555-0144</Phone>
            <Address>
                <Street1>123 Main St</Street1>
                <City>Mercer Island</City>
                <State>WA</State>
                <Postal>68042</Postal>
            </Address>
        </Contact>
    </Contacts>

Kommentar

Visual Basic-versionen av exemplet använder XML-literaler. Du kan också använda XElement i Visual Basic, som i C#-versionen.

Mer information finns i XML-träd.

Se även