Funkční konstrukce (LINQ to XML)

LINQ to XML poskytuje výkonný způsob, jak vytvářet elementy XML označované jako funkční konstrukce. Funkční konstrukce umožňuje vytvořit strom XML v jednom příkazu.

V funkční konstrukci se používá několik klíčových funkcí programovacího rozhraní LINQ to XML:

  • Konstruktor XElement přebírá různé typy argumentů pro obsah. Můžete například předat jiný XElement objekt, který se stane podřízeným prvkem. Můžete předat XAttribute objekt, který se stane atributem prvku. Nebo můžete předat jakýkoli jiný typ objektu, který je převeden na řetězec a stane se textovým obsahem prvku.
  • Konstruktor XElement přebírá params pole typu Object, takže můžete předat libovolný počet objektů konstruktoru. To umožňuje vytvořit prvek, který má složitý obsah.
  • Pokud se objekt implementuje IEnumerable<T>, kolekce v objektu je výčtu a všechny položky v kolekci se přidají. Pokud kolekce obsahuje XElement nebo XAttribute objekty, každá položka v kolekci se přidá samostatně. To je důležité, protože umožňuje předat výsledky dotazu LINQ konstruktoru.

Příklad: Vytvoření stromu XML

Funkční konstrukce můžete použít k napsání kódu pro vytvoření stromu XML. Následuje příklad:

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říklad: Vytvoření stromu XML pomocí výsledků dotazu LINQ

Tyto funkce také umožňují psát kód, který při vytváření stromu XML používá výsledky dotazů LINQ, jako v následujícím příkladu:

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

V jazyce Visual Basic se totéž dělá pomocí literálů XML:

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)

Tento příklad vytvoří následující výstup:

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

Viz také