Funkcionális konstrukció (LINQ–XML)

A LINQ-ről XML-re hatékony módszert kínál a funkcionális konstrukciónak nevezett XML-elemek létrehozására. A funkcionális konstrukció lehetővé teszi egy XML-fa egyetlen utasításban való létrehozását.

A LINQ–XML programozási felület számos fő funkcióját használják a funkcionális konstrukcióban:

  • A XElement konstruktor különböző típusú argumentumokat használ a tartalomhoz. Átadhat például egy másik XElement objektumot, amely gyermekelem lesz. Átadhat egy XAttribute objektumot, amely az elem attribútumává válik. Vagy bármilyen más típusú objektumot átadhat, amely sztringgé alakul, és az elem szöveges tartalma lesz.
  • A XElement konstruktor egy params típusú Objecttömböt vesz fel, így tetszőleges számú objektumot átadhat a konstruktornak. Ez lehetővé teszi egy összetett tartalommal rendelkező elem létrehozását.
  • Ha egy objektum implementálódik IEnumerable<T>, az objektum gyűjteményét számba véve a rendszer hozzáadja a gyűjtemény összes elemét. Ha a gyűjtemény tartalmaz XElement vagy XAttribute objektumokat, a gyűjtemény minden eleme külön lesz hozzáadva. Ez azért fontos, mert lehetővé teszi egy LINQ-lekérdezés eredményeinek átadását a konstruktornak.

Példa: XML-fa létrehozása

Az XML-fa létrehozásához használhatja a funkcionális szerkezetet kód írására. Például:

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")
            )
        )
    );

Példa: XML-fa létrehozása LINQ-lekérdezési eredmények használatával

Ezek a funkciók lehetővé teszik olyan kód írását is, amely a LINQ-lekérdezések eredményeit használja egy XML-fa létrehozásakor, ahogyan az alábbi példában is látható:

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);

A Visual Basicben ugyanezt xml-literálokkal hajtja végre:

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)

Ez a példa a következő kimenetet hozza létre:

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

Lásd még