Strona główna » Kursy » Kurs C# » Parsowanie Dokumentu XML
XML
 

Parsowanie Dokumentu XML

Wstęp

Dokumenty XML pozwalają na przetrzymywanie danych w wygodnej postaci (możliwość edycji edytorem tekstowym). Język C# ma przygotowaną specjalną biblioteką do parsowania takich dokumentów w celu odczytania informacji. W tym artykul zostanie wyjaśnione jak wczytać zapisany plik XML.

Implementacja

Dane Wejściowe

Program ma za zadanie odczytać dane z pliku tekstowego example.xml. Wewnątrz pliku zostały zapisane informacje dotyczące typów danych w języku C#. Postać pliku jest następująca:

  1. <?xml version = "1.0"?>
  2. <types>
  3.   <type name="byte" size="8" />
  4.   <type name="short" size="16" />
  5.   <type name="int" size="32" />
  6.   <type name="long" size="64" />
  7. </types>

Korzeniem dokumentu jest obiekt types wewnątrz którego zostału mieszczone obiekty type. Każdy typ danych ma dwa atrybuty. Są to nazwa oraz rozmiar w pamięci podany w bitach. Dla ułatwienia plik umieszczamy w tym samym folderze co program.

Ładowanie dokumentu

Obiekt XmlDocument pozwala sparsować dokument XML, ale jedynie z zmiennej typu string, więc wpierw należy załadować plik używając dowolnego sposobu. Najwygodniej jest użyć klasy File. Jeśli plik znajduje się w innej lokalizacji niż program to należy podać pełną ścieżkę!

  1.   string zawartosc = File.ReadAllText("example.xml");
  2.   XmlDocument dokument = new XmlDocument();
  3.   dokument.LoadXml(zawartosc);

Dokument został załadowany, więc można teraz przejść do odczytu danych. Na najwyższym poziomie znajdują się dwa elementy: deklaraca formatu XML oraz obiekt types. Wybieramy ten drugi poprzez odczytania danych pod indeksem "types". Następnie można wypisać ilu potomków ma dany obiekt.

  1.   XmlElement typy = dokument["types"];
  2.   Console.WriteLine("Typów: " + typy.ChildNodes.Count);

Przejdźmy teraz do wypisywania wszystkich typów. Można do tego użyć pętli foreach. Zarówno korzeń jak i każdy jego potomek mają typ XmlElement.

  1.   foreach (XmlElement typ in typy.ChildNodes) {
  2.     string nazwa = typ.GetAttribute("name");
  3.     int rozmiar = int.Parse(typ.GetAttribute("size"));
  4.     Console.WriteLine("{0}\t(bajtów: {1})", nazwa, rozmiar / 8);
  5.   }

W celu odczytania atrybutów wybranego elementu korzystamy z metody GetAttribute(), która jako argument przyjmuje nazwę atrybutu do odczytania. Metoda ta zwróci wartość jako tekst, więc w przypadku liczb należy dokonać konwersji na liczbę oddzielnie.

Podsumowanie

Korzystanie z biblioteki XML jest wygodne i bardzo intuicyjne. W następnych artykułach zostanie podane jak edytować i zapisywać dokument XML oraz metody odczytywania bardziej skomplikowanych dokumentów.

Zadania
Zadanie 1
Kod źródłowy Zadanie 1Kod źródłowy Zadanie 1