2013-04-19 42 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> 

Tôi có xml như trên trong một chuỗi và tôi có lớp như dưới đâyChuyển đổi chuỗi xml vào một danh sách các đối tượng của tôi

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

Làm thế nào tôi có thể chuyển đổi các chuỗi xml vào một danh sách các Row Object

+0

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

Trả lời

0

Bạn có thể thử đoạn mã này

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

Bạn có thể sử dụng một XMLSerializer để deserialize các thuộc tính của loại List và giao cho tên thẻ cho thuộc tính dưới dạng gốc.

Tuy nhiên, bạn sẽ cần thẻ XML khi bắt đầu tệp.

U có thể viết trình phân tích cú pháp XML của riêng bạn bằng XElement. Bạn có thể liệt kê các nút hàng, phân tích từng nút trong số họ n tải chúng trong danh sách.

XElement rootNode = XElement.Load(filepath); 

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

cho mỗi thẻ bạn có thể tạo đối tượng Row và điền thuộc tính dựa trên thẻ con. Hy vọng nó giúp

11

Bạn có thể sử dụng LINQ to 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

này sẽ ném ra một lỗi nếu Sẽ là một giá trị chuỗi trong thuộc tính của hàng 'clickcount' – lexeRoy

+0

@lexeRoy Có, nó sẽ ném ngoại lệ khi các giá trị' clickscount' không phải là số nguyên, nhưng tôi giả định rằng nội dung XML của nó khớp với khai báo lớp. – MarcinJuraszek

-1

Hãy thử điều này một:

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

Cách tiếp cận này có thể là một an toàn hơn để tránh trường hợp ngoại lệ trong trường hợp nếu kết quả xml trở nên trống rỗng từ cuộc gọi của máy chủ.

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;} 

Kiểm tra demo fiddle Demo

Các vấn đề liên quan