Konstrukcja funkcjonalna (LINQ to XML)

LINQ to XML zapewnia zaawansowany sposób tworzenia elementów XML nazywanych konstrukcjami funkcjonalnymi. Konstrukcja funkcjonalna umożliwia utworzenie drzewa XML w jednej instrukcji.

Kilka kluczowych funkcji interfejsu programowania LINQ to XML jest używanych w konstrukcji funkcjonalnej:

  • Konstruktor XElement przyjmuje różne typy argumentów dla zawartości. Można na przykład przekazać inny XElement obiekt, który staje się elementem podrzędnym. Można przekazać XAttribute obiekt, który staje się atrybutem elementu. Możesz też przekazać dowolny inny typ obiektu, który jest konwertowany na ciąg i staje się zawartością tekstową elementu.
  • Konstruktor XElement przyjmuje tablicę params typu Object, aby można było przekazać dowolną liczbę obiektów do konstruktora. Dzięki temu można utworzyć element, który ma złożoną zawartość.
  • Jeśli obiekt implementuje IEnumerable<T>element , kolekcja w obiekcie jest wyliczana, a wszystkie elementy w kolekcji są dodawane. Jeśli kolekcja zawiera XElement obiekty lub XAttribute , każdy element w kolekcji jest dodawany oddzielnie. Jest to ważne, ponieważ umożliwia przekazanie wyników zapytania LINQ do konstruktora.

Przykład: tworzenie drzewa XML

Możesz użyć konstrukcji funkcjonalnej, aby napisać kod w celu utworzenia drzewa XML. Poniżej przedstawiono przykład:

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

Przykład: tworzenie drzewa XML przy użyciu wyników zapytania LINQ

Te funkcje umożliwiają również pisanie kodu, który używa wyników zapytań LINQ podczas tworzenia drzewa XML, jak w poniższym przykładzie:

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

W języku Visual Basic to samo jest realizowane za pomocą literałów 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)

Ten przykład generuje następujące wyniki:

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

Zobacz też