使用LINQ编写XML文件时使用for循环

时间:2014-01-29 13:16:10

标签: c# xml arrays linq

我必须将数据保存到XML文件中,数据存储在4个数组和2个int中。我必须使用每个数组中的相同元素(Ex candTur1[0] with votTur1[0]

我尝试过使用此代码:

XDocument document = new XDocument(
   new XDeclaration("1.0", "utf-8", "yes"),
   new XElement("alegeri",
       new XElement("tur",
           new XElement("nrtur", 1),
           for (int i = 0; i < candTur1.Length; i++)
           {
               new XElement("candidat",
               new XElement("nume", candTur1[i]),
               new XElement("voturi",votTur1[i] ),
               new XElement("procent",((votTur1[i] * 100) / votanti)) );
           };
         );
       );
    document.Save("People.xml");

所有数组都具有相同的长度,XML应如下所示:

<?xml version="1.0" encoding="utf-8" ?>
<alegeri>
  <tur>
    <nrtur>1</nrtur>
    <alegatori>2341</alegatori>
    <candidat>
      <nume>Ion</nume>
      <voturi>50</voturi>
      <procentaj>50</procentaj>
    </candidat>
  </tur>
  <tur>
    <nrtur>2</nrtur>
    <alegatori>2341</alegatori>
    <candidat>
      <nume>Ion</nume>
      <voturi>50</voturi>
      <procentaj>50</procentaj>
    </candidat>
  </tur>
</alegeri>

谢谢!

2 个答案:

答案 0 :(得分:2)

你可以这样做:

XDocument document = new XDocument(
   new XDeclaration("1.0", "utf-8", "yes"),
   new XElement("alegeri",
       Enumerable.Range(1,2).Select(i => 
         new XElement("tur",
           new XElement("nrtur", i),
             candTur1.Select((s, index) =>                
                new XElement("candidat",
                new XElement("nume", candTur1[index]),
                new XElement("voturi",votTur1[index] ),
                new XElement("procent",((votTur1[index] * 100) / votanti)) ))))));

我不知道数组的外观,但是这段代码假定所有数组的长度相同。

答案 1 :(得分:2)

要扩展@HåkanFahlstedt的答案,XElement可以接受IEnumerable个子元素。因此,只要您可以创建一系列子元素,就可以将其传递给您想要的任何元素。

因此,要重写您的示例,我首先可以使用循环遍历数组的方法:

private IEnumerable<XElement> GetArraySequence()
{
    for (int i = 0; i < candTur1.Length; i++)
    {
        yield return new XElement("candidat",
            new XElement("nume",candTur1[i]),
            new XElement("voturi",votTur1[i] ),
            new XElement("procent", ((votTur1[i] * 100) / votanti))
        );
    };
}

然后您可以按如下方式创建XML文档:

XDocument document = new XDocument(
    new XDeclaration("1.0", "utf-8", "yes"),
    new XElement("alegeri",
        new XElement("tur",
            new XElement("nrtur", 1)),
            GetArraySequence()
    ));