【问题标题】:Iterating through a list generated from xml遍历从 xml 生成的列表
【发布时间】:2015-05-27 02:41:23
【问题描述】:

我有这个 XML 文件:

<?xml version="1.0" encoding="utf-8" ?>
<Record>
  <File name="slc4t0_appl_release.mot">
    <Line address="040004" data="0720" />
    <Line address="040037" data="31" />
    <Line address="04004C" data="55AA55AA" />
  </File>
  <File name="SRLCAM4T0_PS_163_780A.PAR.mot">
    <Line address="00008242" data="06" />
    <Line address="00008025" data="AFC8" />
    <Line address="00009302" data="476F6C64" />
  </File>
</Record>

之前,我请求帮助如何从所述 XML 中获取和提取信息。幸运的是,一些人提供了如何处理这个问题的解决方案。见here。此外,我可以通过使用索引来调用对象(这是正确的术语吗?)。像这样...record.files[0].lines[0].data

现在,我希望能够逐一遍历文件和行。所以程序会先遍历files[0],然后循环遍历lines[],直到一切都完成,然后接下来会遍历files[1],再次循环files[],依此类推。

我认为这很容易

int i, ii;
for (i = 0; index <= meh._record.files.Count - 1; index++)
{
    for (ii = 0; ii <= meh._record.files[i].lines.Count - 1; ii++)
    {
        //code
        string addr, dat;
        addr = record.files[i].lines[ii].address;
        dat = record.files[i].lines[ii].data;
        //so on...
    }
}

当我尝试它时,它似乎在做我想做的事。但我可能仍然在这里做错了什么。或者,如果有更好的替代方案,那就太好了。

【问题讨论】:

  • 代码要么做你想做的事,要么不做。您需要先弄清楚,以便清楚您正在寻找什么样的帮助。

标签: c# xml list


【解决方案1】:

由于您不需要索引 iii 来访问相应列表中的特定项目,我认为如果您使用 foreach 来完成此任务,它会更干净,更易读:

foreach(var file in meh._record.files)
{
    foreach(var line in file.lines)
    {
        //code
        string addr, dat;
        addr = line.address;
        dat = line.data;
        //so on...
    }
}

从您到目前为止发布的内容来看,您的代码似乎正在执行您已经描述的操作,但我们无法比您更确定 :)

【讨论】:

    【解决方案2】:

    另一种读取xml 并访问每个元素的简单方法。

    XDocument xml = XDocument.Parse(s);     
    var q = from b in xml.Root.Descendants("File")
        select new
    {
        File =  (string)b.Attribute("name").Value,
    
        Lines = b.Descendants("Line").Select(l=> new { Address= l.Attribute("address").Value, Data = l.Attribute("data").Value})            
    
    };
    

    您可以访问此处显示的项目。

    foreach (var rec in q)
    {
        Console.Write("File = {0}", rec.File);
        foreach(var line in rec.Lines)
        {
            Console.Write("Address = {0} , Data = {1}", line.Address, line.Data);
        }
    
    }
    

    工作代码可以在here找到

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-09-12
      • 1970-01-01
      • 2022-01-03
      • 1970-01-01
      • 2019-07-21
      相关资源
      最近更新 更多