2013-04-19 17 views
5
<root> 
<row> 
    <linksclicked>http://www.examiner.com/</linksclicked> 
    <clickedcount>34</clickedcount> 
</row> 
<row> 
    <linksclicked>http://www.sample123.com</linksclicked> 
    <clickedcount>16</clickedcount> 
</row> 
<row> 
    <linksclicked>http://www.testing123.com</linksclicked> 
    <clickedcount>14</clickedcount> 
</row> 
</root> 

Mam xml jak wyżej w łańcuchu i mam klasy jak poniżejKonwersja xml ciąg do listy mojego obiektu

public class Row 
{ 
    public string linksclicked { get; set; } 
    public int clickedcount { get; set; } 
} 

jaki sposób można przekonwertować ciąg xml do listy Row Address

+0

http://msdn.microsoft.com/en-us/library/system.xml.serialization.xmlserializer.aspx – Khurshid

Odpowiedz

0

można spróbować ten kawałek kodu

string xml = "<Ids><id>1</id><id>2</id></Ids>"; 
ArrayList list = new ArrayList();  
XmlDocument doc = new XmlDocument(); 
doc.LoadXml(xml);  
XmlNodeList idNodes = doc.SelectNodes("Ids/id"); 
foreach (XmlNode node in idNodes) 
    list.Add(node.InnerText); 
0

można użyć XMLSerializer deserializacji właściwość typu listy i przypisać wpisz nazwę do właściwości jako root.

Potrzebny jest jednak znacznik XML na początku pliku.

U można napisać własny parser XML za pomocą XElement. Możesz wyświetlić listę węzłów wierszy, przeanalizować każdy z nich i wczytać je na liście.

XElement rootNode = XElement.Load(filepath); 

List<XElement> nodes = rootNode.Descendants().Where(t=> t.Name.ToString().Equals("row")); 

dla każdego znacznika można utworzyć wiersz Obiekt i wypełnić jego właściwości na podstawie znaczników podrzędnych. Nadzieja pomaga

11

Można użyć LINQ do XML:

var doc = XDocument.Parse(xmlString); 

var items = (from r in doc.Root.Elements("row") 
      select new Row() 
       { 
        linksclicked = (string) r.Element("linksclicked"), 
        clickedcount = (int) r.Element("clickedcount") 
       }).ToList(); 
+0

ten wygeneruje błąd, jeśli Będzie być wartością ciągu w wierszu 'clickedcount' Właściwość wiersza – lexeRoy

+0

@lexeRoy Tak, wyrzuci wyjątek, gdy wartości' clickedcount' nie są liczbami całkowitymi, ale założyłem, że jego zawartość XML pasuje do deklaracji klasy. – MarcinJuraszek

-1

Spróbuj tego:

var xml = @"  
<root> 
    <row> 
    <linksclicked>http://www.examiner.com/</linksclicked> 
    <clickedcount>34</clickedcount> 
    </row> 
    <row> 
    <linksclicked>http://www.sample123.com</linksclicked> 
    <clickedcount>16</clickedcount> 
    </row> 
    <row> 
    <linksclicked>http://www.testing123.com</linksclicked> 
    <clickedcount>14</clickedcount> 
    </row> 
</root>"; 

var xElems = XDocument.Parse(xmlString); 
var xRow = doc.Root.Elements("row"); 
List<Row> rowList = (from rowTags in xRow 
        let clickCount = 0 
        let isClickCountOk = Int32.TryParse((rowTags.Element("clickedcount").Value, clickCount); 
        where !string.IsNullOrEmpty(rowTags.Element("linksclicked").Value) && 
          !string.IsNullOrEmpty(rowTags.Element("clickedcount").Value) 
        select new Row() 
        { 
         linksclicked = rowTags.Element("linksclicked").Value, 
         clickedcount = clickCount 
        }).ToList(); 
0

Takie podejście może być bezpieczniejsze jeden uniknąć wyjątków w przypadku, gdy wynik XML staje się pusty z połączenia z serwerem.

string xmlString = "<School><Student><Id>2</Id><Name>dummy</Name><Section>12</Section></Student><Student><Id>3</Id><Name>dummy</Name><Section>11</Section></Student></School>"; 

XDocument doc = new XDocument(); 
//Check for empty string. 
if (!string.IsNullOrEmpty(xmlString)) 
{ 
    doc = XDocument.Parse(xmlString); 
} 
List<Student> students = new List<Student>(); 
//Check if xml has any elements 
if(!string.IsNullOrEmpty(xmlString) && doc.Root.Elements().Any()) 
{ 
    students = doc.Descendants("Student").Select(d => 
    new Student 
    { 
     id=d.Element("Id").Value, 
     name=d.Element("Name").Value, 
     section=d.Element("Section").Value 

    }).ToList(); 
} 
public class Student{public string id; public string name; public string section;} 

Sprawdź skrzypce demo Demo