Konstrukcja funkcjonalna (LINQ to XML)

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

Kilka kluczowych funkcji interfejsu LINQ to XML programowania są używane 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 pobiera tablicę typu , dzięki czemu można przekazać dowolną liczbę XElement params obiektów do Object konstruktora. Dzięki temu można utworzyć element o złożonej zawartości.
  • Jeśli obiekt implementuje obiekt , kolekcja w obiekcie jest wyliczana i dodawane są wszystkie elementy IEnumerable<T> w kolekcji. Jeśli kolekcja zawiera XElement obiekty lub , każdy element w XAttribute kolekcji jest dodawany oddzielnie. Jest to ważne, ponieważ pozwala przekazać wyniki zapytania LINQ do konstruktora.

Przykład: tworzenie drzewa XML

Konstrukcja funkcjonalna umożliwia pisanie kodu 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 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ż