LINQ to XML w ASP.net – wprowadzenie

Rozszerzenie LINQ to XML stanowi szybkie, wygodne i obiektowe rozwiązanie generowania dokumentów XML przy wykorzystaniu platformy .NET Framework. Umożliwia również przechodzenie pomiędzy standardowymi obiektami XML oraz współpracę z innymi rozszerzeniami LINQ.

Kurs ten zobrazuje użycie rozszerzenia LINQ to XML w alternatywie do standardowego rozwiązania zaprezentowanego w temacie Dokumenty XML w C# .NET – wprowadzenie. Interfejs aplikacji ASP.net zbudowany jest również w konwencji poprzedniego kursu, aby uzyskać identyczny efekt końcowy w postaci pliku XML.

Interfejs aplikacji korzystającej z Linq to XML

Interfejs aplikacji korzystającej z Linq to XML

Programowa obsługa rozszerzenia LINQ to XML

Z uwagi na zachowanie przejrzystości opisu, zwrócę uwagę na najważniejsze rzeczy, proste czynności natomiast zostaną opisane w kodzie programu w postaci komentarzy. Zwrócić uwagę należy jednak na dostęp do ścieżki serwerowej pliku uzyskiwanej przez wykorzystanie metody HttpContext.Current.Server.MapPath(<file_name>).

Przed jakimikolwiek czynnościami należy dodać do pliku programu wymagane przestrzenie nazw [3, 7, 8, 9].

Podczas tworzenia standardowego dokumentu XML korzystamy z klasy XmlDocument [3] chcąc skorzystać natomiast z rozszerzenia LINQ to XML musimy skorzystać z klasy XDocument [24].

Tworzenie dokumentu klasy XDocument ma postać zagnieżdżoną, w której możemy utworzyć wszystkie elementy naszego rekordu. Tworząc nowy obiekt XDocument [24] jesteśmy w stanie utworzyć od razu jego deklarację XDeclaration, element podrzędny XElement “dataBase” stanowiący gałąź główną naszego dokumentu XML oraz element podrzędny do niego XElement “dataRow” stanowiący gałąź rekordu danych. Zagnieżdżenie elementów w kodzie odpowiada zagnieżdżeniu w dokumencie XML.

Często problemy stwarza obiekt klasy XDeclaration, który nie jest zapisywany do pliku XML. Aby obiekt XDeclaration został zapisany do naszego dokumentu XML musimy użyć metody Save [36] należącej do klasy XDocument, a nie metod z klasy XmlDocument lub innych.

Tworzenie obiektów XElement daje nam o wiele więcej możliwości z uwagi na ich konstruktory.

Proces dopisywania rekordów danych do istniejącego dokumentu XML w tym przypadku również nie jest problematyczny, jednak wymaga opanowania kilku zależności (cały kod mógłbym zamknąć zwięźle z odwołaniem do jednaj metody, jednak wówczas byłby on mniej przejrzysty dla osoby, która widzi rozszerzenie LINQ to XML po raz pierwszy).

W pierwszej kolejności musimy utworzyć nowy obiekt XmlDocument i załadować do niego plik XML [7]. Następny krok wygląda podobnie jak podczas tworzenia nowego dokumentu XML, pomijamy jednak elementy XDocument, XDeclaration oraz element XElement głównej gałęzi “dataBase” (ponieważ istnieją one w załadowanym pliku) i tworzymy jedynie gałąź rekordu danych XElement  “dataRow” [8]. Czasem musimy operować pomiędzy klasami przestrzeni nazw Xml oraz Xml.Linq, aby skorzystać z danej metody. Element klasy XElement  konwertujemy na element klasy XmlElement za pośrednictwem metody ToXmlElement [18], dzięki czemu jesteśmy w stanie utworzyć z niego obiekt klasy XmlNode, kóry z kolei jesteśmy w stanie dołączyć do istniejącego dokumentu XML xmlDocument [19] bez podniesienia wyjątku.

Konwersje pomiędzy obiektami klas XElement oraz XmlElement potrafią sprawić pewne problemy, dlatego w tym celu używam przygotowanych do tego celu metod, których nie ma w standardowej przestrzeni nazw. Bardzo istotnymi czynnościami jest zarówno sama konwersja, utworzenie obiektu klasy XmlNode oraz przypisanie go do obiektu klasy XmlDocument. Na pierwszy rzut oka nie wydaje się to ciężkie, ale mamy tutaj do czynienia z obiektami z różnych kontekstów, warto więc zapamiętać tą regułę.

Jak już wspomniałem, w tego typu operacjach często możemy potrzebować dokonać konwersji z obiektu klasy XElement do XmlElement lub obiektu klasy XDocument do XmlDocument.

Musimy utworzyć obiekt klasy XmlReader [4], aby dokonać odczytu obiektu klasy XDocument, a następnie załadować go do nowego obiektu XmlDocument, który ulegnie zwróceniu przez metodę. Metoda nie jest skomplikowana, ale bardzo przydatna.

Podobnie działa metoda ToXmlElement, w której dokonujemy jednak dodatkowego odczytania obiektu klasy xmlDocument do postaci obiektu klasy xmlElement [8].

Załadowanie naszego dokumentu XML do kontrolki TextBox możemy uzyskać na różne sposoby. Odczyt bezpośrednio z obiektu XML nie gwarantuje zachowania formatowania tekstu w kontrolce.

Odczyt strumienia z pliku XML zapisanego na dysku zachowuje formatowanie tekstu w kontrolce TextBox z właściwością MultiLine.

Finalna struktura dokumentu XML generowanego przez naszą aplikację ASP.net prezentuje się identycznie jak w poprzednim kursie Dokumenty XML w C# .NET – wprowadzenie.

Przykładowy projekt znajduje się pod linkiem: LINQ to XML w ASP.net – wprowadzenie

Menu LeftMenu, login: admin, hasło: haselko

Loading Disqus Comments ...
Loading Facebook Comments ...