Jak czytać XML w C#

Jak Czytac Xml W C



Powszechnie używanym formatem danych do udostępniania danych w Internecie jest XML, ponieważ dane mogą być w nim przechowywane i wymieniane między systemami w elastyczny i przyjazny dla użytkownika sposób. W języku C# odczytywanie plików XML jest częstym zadaniem, a platforma .NET udostępnia różne klasy i metody analizowania i odczytywania plików XML. W tym poście omówimy wykorzystanie platformy .NET do odczytywania XML w języku C#.

Czytanie XML w C#

Istnieje kilka sposobów na odczytanie pliku XML w języku C# i każda metoda ma swoje zalety i wady, a wybór zależy od wymagań projektu. Poniżej przedstawiono kilka sposobów odczytywania pliku XML w języku C#:

Oto zawartość pliku XML, który utworzyłem i który zostanie użyty do demonstracji nadchodzących metod:







< xml wersja = „1,0” kodowanie = 'utf-8' ? >
< pracownicy >
< pracownik >
< ID > 1 ID >
< nazwa > sam bosz nazwa >
< dział > Marketing dział >
< wynagrodzenie > 50000 wynagrodzenie >
pracownik >
< pracownik >
< ID > 2 ID >
< nazwa > Jane Doe nazwa >
< dział > Finanse dział >
< wynagrodzenie > 60000 wynagrodzenie >
pracownik >
< pracownik >
< ID > 3 ID >
< nazwa > James nazwa >
< dział > Zasoby ludzkie dział >
< wynagrodzenie > 70000 wynagrodzenie >
pracownik >
pracownicy >

1: Korzystanie z dokumentu XmlDocument

Aby odczytać plik XML w języku C#, można użyć klasy XmlDocument lub klasy XDocument, które są częścią przestrzeni nazw System.Xml. Klasa XmlDocument zapewnia podejście DOM (Document Object Model) do odczytywania XML, podczas gdy klasa XDocument zapewnia podejście LINQ (Language-Integrated Query). Oto przykład wykorzystania klasy XmlDocument do odczytu pliku XML:



przy użyciu Systemu;
przy użyciu System.Xml;

Program klasowy
{
statyczna pustka Główny ( strunowy [ ] argumenty )
{
Dokument XmlDocument = nowy dokument XmlDocument ( ) ;
dok. Załaduj ( „pracownicy.xml” ) ;

Węzły XmlNodeList = doc.DocumentElement.SelectNodes ( '/pracownicy/pracownik' ) ;

dla każdego ( węzeł XmlNode W węzły )
{
strunowy ID = node.SelectSingleNode ( 'ID' ) .Tekst wewnętrzny;
nazwa ciągu = węzeł.SelectSingleNode ( 'nazwa' ) .Tekst wewnętrzny;
dział ciągów znaków = node.SelectSingleNode ( 'dział' ) .Tekst wewnętrzny;
string pensja = node.SelectSingleNode ( 'wynagrodzenie' ) .Tekst wewnętrzny;
Console.WriteLine ( „Identyfikator: {0}, imię i nazwisko: {1}, dział: {2}, wynagrodzenie: {3}” , ID , nazwisko, dział, wynagrodzenie ) ;
}
}
}

Ten kod używa klasy XmlDocument do ładowania pliku XML i metody SelectNodes do pobierania listy węzłów pracowników. Następnie dla każdego węzła pracownika używa metody SelectSingleNode w celu pobrania wartości węzłów potomnych id, name, departamentu i wynagrodzenia i wyświetla je za pomocą Console.WriteLine:







2: Korzystanie z XDocument

Alternatywnie możesz również użyć klasy XDocument do odczytania pliku XML przy użyciu podejścia LINQ, a poniżej znajduje się kod, który ilustruje, jak to zrobić:

przy użyciu Systemu;

Program klasowy
{
statyczna pustka Główny ( strunowy [ ] argumenty )
{
XDocument doc = XDocument.Load ( „pracownicy.xml” ) ;

dla każdego ( Element XElement W dok. Potomkowie ( 'pracownik' ) )
{
int ID = int.Analizuj ( element. Element ( 'ID' ) .Wartość ) ;
nazwa ciągu = element.Element ( 'nazwa' ) .Wartość;
dział ciągów znaków = element.Element ( 'dział' ) .Wartość;
int pensja = int.Parse ( element. Element ( 'wynagrodzenie' ) .Wartość ) ;
Console.WriteLine ( $ „ID: {id}, imię i nazwisko: {name}, dział: {department}, wynagrodzenie: {pensja}” ) ;
}
}
}

Plik XML jest ładowany do obiektu XDocument przy użyciu metody XDocument.Load. Wszystkie elementy „pracownika” pliku XML są następnie pobierane przy użyciu techniki potomków. Dla każdego elementu jego elementy podrzędne są dostępne przy użyciu metody Element, a ich wartości są wyodrębniane przy użyciu właściwości Value. Na koniec wyodrębnione dane są drukowane na konsoli.



Pamiętaj, że XDocument należy do przestrzeni nazw System.Xml.Linq, więc musisz dołączyć następującą instrukcję using na początku pliku C#

3: Korzystanie z XmlReadera

XmlReader to szybki i wydajny sposób na odczytanie pliku XML w języku C#. Odczytuje plik sekwencyjnie, co oznacza, że ​​ładuje tylko jeden węzeł na raz, co czyni go idealnym rozwiązaniem do pracy z dużymi plikami XML, które w przeciwnym razie byłyby trudne do obsłużenia w pamięci.

przy użyciu Systemu;
przy użyciu System.Xml;

Program klasowy
{
statyczna pustka Główny ( strunowy [ ] argumenty )
{
za pomocą ( Czytnik XmlReader = XmlReader.Create ( „pracownicy.xml” ) )
{
chwila ( czytelnik.Czytaj ( ) )
{
Jeśli ( reader.NodeType == XmlNodeType.Element && czytelnik.Nazwa == 'pracownik' )
{
Console.WriteLine ( 'ID: ' + czytnik. GetAttribute ( 'ID' ) ) ;
czytelnik. Odczyt do potomka ( 'nazwa' ) ;
Console.WriteLine ( 'Nazwa: ' + czytnik.ReadElementContentAsString ( ) ) ;
czytelnik.ReadToNextSibling ( 'dział' ) ;
Console.WriteLine ( 'Dział: ' + czytnik.ReadElementContentAsString ( ) ) ;
czytelnik.ReadToNextSibling ( 'wynagrodzenie' ) ;
Console.WriteLine ( 'Wynagrodzenie: ' + czytnik.ReadElementContentAsString ( ) ) ;
}
}
}
}
}

W tym przykładzie używamy metody XmlReader.Create, aby utworzyć instancję XmlReader i przekazać ścieżkę pliku XML jako parametr. Następnie używamy pętli while, aby odczytać plik XML węzeł po węźle przy użyciu metody Read XmlReader.

Wewnątrz pętli najpierw sprawdzamy, czy bieżący węzeł jest elementem pracownika, używając właściwości NodeType i Name XmlReader. Jeśli tak, stosujemy metodę GetAttribute, aby pobrać wartość atrybutu id.

Następnie używamy metody ReadToDescendant, aby przenieść czytelnika do elementu nazwiska wewnątrz elementu pracownik. Wartość elementu name jest następnie uzyskiwana za pomocą funkcji ReadElementContentAsString.

Podobnie używamy metody ReadToNextSibling, aby przenieść czytelnika do następnego elementu rodzeństwa i uzyskać wartość elementów działu i wynagrodzenia.

Na koniec używamy bloku using, aby upewnić się, że obiekt XmlReader zostanie prawidłowo usunięty po zakończeniu czytania pliku XML:

4: XML do LINQ

Odczytywanie pliku XML przy użyciu LINQ to XML w języku C# to zaawansowany sposób uzyskiwania dostępu do danych XML i manipulowania nimi. LINQ to XML to składnik technologii LINQ, który zapewnia prosty i wydajny interfejs API do pracy z danymi XML.

przy użyciu Systemu;
przy użyciu System.Linq;
przy użyciu System.Xml.Linq;

Program klasowy
{
statyczna pustka Główny ( strunowy [ ] argumenty )
{
XDocument doc = XDocument.Load ( „pracownicy.xml” ) ;

var pracownicy = od e W dok. Potomkowie ( 'pracownik' )
wybierać nowy
{
Id = e.Element ( 'ID' ) .Wartość,
Nazwa = e.Element ( 'nazwa' ) .Wartość,
Dział = e.Element ( 'dział' ) .Wartość,
Wynagrodzenie = e.Element ( 'wynagrodzenie' ) .Wartość
} ;
dla każdego ( pracownik var W pracownicy )
{
Console.WriteLine ( $ „Id: {employee.Id}, imię i nazwisko: {employee.Name}, dział: {employee.Department}, wynagrodzenie: {employee.Salary}” ) ;
}
}
}

W tym kodzie najpierw ładujemy plik XML za pomocą metody XDocument.Load(). Następnie używamy LINQ to XML do wykonywania zapytań dotyczących danych XML i wybierania elementów identyfikatora, nazwiska, działu i wynagrodzenia dla każdego elementu pracownika. Przechowujemy te dane w postaci anonimowej, a następnie przeglądamy wyniki w celu wydrukowania informacji o pracownikach w konsoli.

5: Korzystanie z XPath

XPath to język zapytań używany do poruszania się po dokumencie XML w celu zlokalizowania określonych elementów, atrybutów i węzłów. Jest skutecznym narzędziem do wyszukiwania i filtrowania informacji w dokumencie XML. W języku C# możemy używać języka XPath do odczytywania i wyodrębniania danych z plików XML.

przy użyciu Systemu;
przy użyciu System.Xml.XPath;
przy użyciu System.Xml;

Program klasowy
{
statyczna pustka Główny ( strunowy [ ] argumenty )
{
Dokument XmlDocument = nowy dokument XmlDocument ( ) ;
dok. Załaduj ( „pracownicy.xml” ) ;

// Utwórz XPathNavigator z dokumentu
XPathNavigator nav = doc.CreateNavigator ( ) ;

// Skompiluj wyrażenie XPath
XPathExpression wyr = nav. Kompiluj ( '/pracownicy/pracownik/nazwisko' ) ;

// Oceń wyrażenie i przeanalizuj wyniki
XPathNodeIterator iterator = nav.Select ( wyr ) ;
chwila ( iterator.MoveNext ( ) )
{
Console.WriteLine ( iterator.Current.Value ) ;
}
}
}

Ten kod ładuje plik „employees.xml” przy użyciu dokumentu XmlDocument, tworzy obiekt XPathNavigator na podstawie dokumentu i kompiluje wyrażenie XPath w celu wybrania wszystkich elementów w elementach . Następnie ocenia wyrażenie i przegląda wyniki, wypisując wartość każdego elementu .

Notatka: Korzystanie z XPath może być skutecznym i elastycznym sposobem wybierania elementów i atrybutów z dokumentu XML, ale może być również bardziej złożone niż niektóre inne omówione przez nas metody.

Wniosek

Użycie klasy XmlDocument zapewnia pełne możliwości manipulowania modelem DOM, ale może być wolniejsze i wymagać więcej pamięci niż inne metody. Klasa XmlReader jest dobrą opcją do odczytywania dużych plików XML, ponieważ zapewnia szybkie, oparte na strumieniu podejście tylko do przodu i bez buforowania. Klasa XDocument zapewnia prostszą i bardziej zwięzłą składnię, ale może nie być tak wydajna jak XmlReader. Ponadto metody LINQ to XML i XPath zapewniają zaawansowane możliwości wykonywania zapytań w celu wyodrębnienia określonych danych z pliku XML.