/ / Czytaj elementy potomne za pomocą C # z xml - c #, xml

Czytaj elementy potomne za pomocą C # z xml - c #, xml

Powitanie, Jaka jest najlepsza praktyka do odczytywania wszystkich atrybutów z elementów potomnych według atrybutów ID za pomocą C # w pliku xml wymienionym poniżej.

Dziękuję Ci,

 <?xml version="1.0" encoding="utf-8"?>
<WinDLN>

<Program ID="1" Name="CIS562" StartDate="9/8/2010 5:50:00 PM" EndDate="9/8/2010 9:15:00 PM" />

<Program ID="2" Name="CIS532" StartDate="10/8/2010 5:50:00 PM" EndDate="10/8/2010 9:15:00 PM" />

<Program ID="3" Name="ECE552" StartDate="6/8/2010 5:50:00 PM" EndDate="6/8/2010 9:15:00 PM" />

</WinDLN>

Odpowiedzi:

4 dla odpowiedzi № 1

Następujące wywołanie LINQ powinno załatwić sprawę:

var attrs =
doc.Descendants("Program").First(prog =>
prog.Attribute("ID").Value == "2").Attributes();

The Descendants Metoda daje wszystkie elementy (w dowolnym miejscu) w dokumencie XML o nazwie „Program”. Za pomocą First, możesz uzyskać pierwszy, który pasuje do określonego orzecznika (np. ma „ID” równy „2”). Pamiętaj, że możesz użyć FirstOrDefault jeśli chcesz null gdy nie ma takiego elementu. Wreszcie, Attributes daje kolekcję wszystkich atrybutów elementu.

Wydaje mi się, że użycie LINQ-a XML, jeśli możesz, jest lepsze - będziesz pisać ten sam kod podczas pracy z XML lub innymi źródłami danych, więc czytanie i pisanie kodu jest łatwe (gdy nauczysz się LINQ).


3 dla odpowiedzi № 2

Można to zrobić na wiele sposobów, np. LINQ przez XML. Ale korzystanie z Xpath zdecydowanie nie jest jeszcze martwe:

class Program
{
static void Main(string[] args)
{
XmlDocument doc = new XmlDocument();
string xml = @"... your xml ";
doc.LoadXml(xml);
// Using SelectNodes with Xpath
XmlNodeList list = doc.SelectNodes("WinDLN/Program[@ID="2"]");
Console.WriteLine(list.Count); // prints 1
list = doc.SelectNodes("WinDLN/Program[@ID]");
Console.WriteLine(list.Count); // prints 3 (selected all IDs)
}
}

Która metoda wybierzesz jest najczęściej kwestią gustu, wybierz interfejs API, w którym czujesz się najlepiej.