2013-01-09 18 views
8

Przejrzałem kilka wątków tutaj na przepełnieniu stosu i nie mogę znaleźć odpowiedzi. Mam konfiguracji pliku XML tak:C# Parsowanie pliku XML

<entry id="1" type="a"> 
    <name>string 1</name> 
    <description>any description</description> 
</entry> 
<entry id="2" type="b"> 
    <name>string 2</name> 
    <description>any description #2</description> 
</entry> 

muszę zaznaczyć wszystkie „wejścia” tagi i powrócić identyfikator, typ, wewnętrzna nazwa i opis tagi wpisu. Jak mogę to zrobić za pomocą C#?

Dzięki,

+0

To na pewno wygląda jak XML ... jako taki, użyłbym XDocument i rozszerzeń LINQ dla XML. Możesz także użyć XPath, jeśli potrzebujesz dodatkowej mocy (w niektórych przypadkach kosztem złożoności). Zobacz http://stackoverflow.com/questions/566167/query-an-xdocument-for-elements-by-name-at-any-depth –

+0

http://msdn.microsoft.com/en-us/library/system .xml.linq.xdocument.descendants.aspx (Linq to XMl z potomkami to dobry punkt patrzenia). –

Odpowiedz

13

Należy pamiętać, że plik xml powinien mieć pojedynczy węzeł główny. Oto parsowania z Linq do XML:

var xdoc = XDocument.Load(path_to_xml); 
var entries = from e in xdoc.Descendants("entry") 
       select new { 
       Id = (int)e.Attribute("id"), 
       Type = (string)e.Attribute("type"), 
       Name = (string)e.Element("name"), 
       Description = (string)e.Element("description") 
       }; 

Zapytanie zwróci sekwencję obiektów anonimowych odpowiadających każdego elementu wejściowego (o właściwościach Id, typ, nazwa i opis).

+0

@ user1425433 [Dokumenty XML muszą mieć element główny] (http://www.w3schools.com/xml/syml_syntax.asp) w pytaniu znajdują się dwa * elementy * wpisu na poziomie katalogu głównego –

1

Look w HtmlAgilityPack bibliotece. Używając go możesz parsować HTML używając LINQ lub XPath.