Dela via


Funktionell konstruktion (LINQ till XML)

LINQ till XML är ett kraftfullt sätt att skapa XML-element som kallas funktionell konstruktion. Med funktionell konstruktion kan du skapa ett XML-träd i en enda instruktion.

Flera viktiga funktioner i programmeringsgränssnittet LINQ till XML används i funktionell konstruktion:

  • Konstruktorn XElement tar olika typer av argument för innehåll. Du kan till exempel skicka ett annat XElement objekt, som blir ett underordnat element. Du kan skicka ett XAttribute objekt som blir ett attribut för elementet. Eller så kan du skicka någon annan typ av objekt, som konverteras till en sträng och blir textinnehållet i elementet.
  • Konstruktorn XElement tar en params matris av typen Object, så att du kan skicka valfritt antal objekt till konstruktorn. På så sätt kan du skapa ett element som har komplext innehåll.
  • Om ett objekt implementerar räknas IEnumerable<T>samlingen i objektet upp och alla objekt i samlingen läggs till. Om samlingen innehåller XElement eller XAttribute objekt läggs varje objekt i samlingen till separat. Detta är viktigt eftersom du kan skicka resultatet av en LINQ-fråga till konstruktorn.

Exempel: Skapa ett XML-träd

Du kan använda funktionell konstruktion för att skriva kod för att skapa ett XML-träd. Följande utgör ett exempel:

XElement contacts =
    new XElement("Contacts",
        new XElement("Contact",
            new XElement("Name", "Patrick Hines"),
            new XElement("Phone", "206-555-0144"),
            new XElement("Address",
                new XElement("Street1", "123 Main St"),
                new XElement("City", "Mercer Island"),
                new XElement("State", "WA"),
                new XElement("Postal", "68042")
            )
        )
    );

Exempel: Skapa ett XML-träd med LINQ-frågeresultat

Med de här funktionerna kan du också skriva kod som använder resultatet av LINQ-frågor när du skapar ett XML-träd, som i följande exempel:

XElement srcTree = new XElement("Root",
    new XElement("Element", 1),
    new XElement("Element", 2),
    new XElement("Element", 3),
    new XElement("Element", 4),
    new XElement("Element", 5)
);
XElement xmlTree = new XElement("Root",
    new XElement("Child", 1),
    new XElement("Child", 2),
    from el in srcTree.Elements()
    where (int)el > 2
    select el
);
Console.WriteLine(xmlTree);

I Visual Basic utförs samma sak med XML-literaler:

Dim srcTree As XElement = _
    <Root>
        <Element>1</Element>
        <Element>2</Element>
        <Element>3</Element>
        <Element>4</Element>
        <Element>5</Element>
    </Root>
Dim xmlTree As XElement = _
    <Root>
        <Child>1</Child>
        <Child>2</Child>
        <%= From el In srcTree.Elements() _
            Where CInt(el) > 2 _
            Select el %>
    </Root>
Console.WriteLine(xmlTree)

Det här exemplet genererar följande utdata:

<Root>
  <Child>1</Child>
  <Child>2</Child>
  <Element>3</Element>
  <Element>4</Element>
  <Element>5</Element>
</Root>

Se även