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 № 1Nastę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.