9
<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>

我在一个字符串中有上面的xml,我有下面的类

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

如何将 xml 字符串转换为行对象列表

4

5 回答 5

14

您可以使用 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();
于 2013-04-19T05:52:49.930 回答
0

您可以使用 XMLSerializer 反序列化 List 类型的属性并将标记名称分配给属性作为根。

但是,您需要在文件的开头使用 XML 标记。

您可以使用 XElement 编写自己的 XML 解析器。您可以列出行节点,解析它们中的每一个并将它们加载到列表中。

XElement rootNode = XElement.Load(filepath);

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

对于每个标签,您可以创建一个对象 Row 并根据子标签填充其属性。希望能帮助到你

于 2013-04-19T05:52:18.740 回答
0

你可以试试这段代码

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);
于 2013-04-19T05:50:41.183 回答
0

如果 xml 结果从服务器调用中变为空,这种方法可以更安全地避免异常。

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

检查演示小提琴Demo

于 2017-08-31T05:08:17.983 回答
-1

试试这个:

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();
于 2013-04-19T06:02:12.177 回答