循环xml并将值存储为变量-C#

  • 本文关键字:变量 -C# 存储 xml 循环 c#
  • 更新时间 :
  • 英文 :


这里是C#的新手,我想在我的一个小项目中得到一些帮助。我有一个XML文件,其中包含一些元素,我想循环遍历并存储它的值和使用。

我想要获取"0"中的所有降序属性;第2周";并将它们存储为变量并执行一些代码。然后我想用下一个元素"的下一个下降元素"再次进行该过程;第2周";。

有人能帮我吗?

到目前为止我的C#代码:

XDocument xdoc = XDocument.Load(IHCSchedulingConfigFile);
var xelem = xdoc.Descendants("week")
.Where(x => x.Attribute("weeknumber").Value.Equals("2"))
.ToList();
foreach (var week in xelem)
{
int groupNumber = Convert.ToInt32(xelem.Elements("groupNumber").Any());
string starTtime = xelem.Elements("starttime").ToString();
int startDay = Convert.ToInt32(xelem.Elements("startday").Any());
string endTime = xelem.Elements("endtime").ToString();
int endDay = Convert.ToInt32(xelem.Elements("endday").Any());
Console.WriteLine(groupNumber);
Console.WriteLine("rn");
Console.WriteLine(starTtime);
Console.WriteLine("rn");
Console.WriteLine(startDay);
Console.WriteLine("rn");
Console.WriteLine(endTime);
Console.WriteLine("rn");
Console.WriteLine(endDay);
Console.WriteLine("rn");
Console.ReadLine();
// Execute code 
}

从中读取值的XML:

<root>
<week weeknumber="1">
<groupNumber>1</groupNumber>
<starttime>10:00</starttime>
<startday>8</startday>
<endtime>12:00</endtime>
<endday>8</endday>
</week> 
<week weeknumber="1">
<groupNumber>2</groupNumber>
<starttime>10:00</starttime>
<startday>8</startday>
<endtime>12:00</endtime>
<endday>8</endday>
</week>
<week weeknumber="2">
<groupNumber>1</groupNumber>
<starttime>10:00</starttime>
<startday>8</startday>
<endtime>12:00</endtime>
<endday>8</endday>
</week> 
<week weeknumber="2">
<groupNumber>2</groupNumber>
<starttime>10:00</starttime>
<startday>8</startday>
<endtime>12:00</endtime>
<endday>8</endday>
</week>
<week weeknumber="3">
<groupNumber>1</groupNumber>
<starttime>10:00</starttime>
<startday>8</startday>
<endtime>12:00</endtime>
<endday>8</endday>
</week> 
<week weeknumber="3">
<groupNumber>2</groupNumber>
<starttime>10:00</starttime>
<startday>8</startday>
<endtime>12:00</endtime>
<endday>8</endday>
</week>
</root>

您还可以转换为对象并循环

var xdoc = XDocument.Load($"XMLFile1.xml");
var items = xdoc.Descendants("week")
.Where(x => x.Attribute("weeknumber").Value == "2")
.Select(xelem => new
{
groupNumber = xelem.Element("groupNumber").Value,
starTtime = xelem.Element("starttime").Value,
startDay = Convert.ToInt32(xelem.Element("startday").Value),
endTime = xelem.Element("endtime").Value,
endDay = Convert.ToInt32(xelem.Element("endday").Value)
});
foreach (var item in items)
{
Console.WriteLine(item.groupNumber);
}

尝试将其作为for each循环。您当前没有获得值,您使用的是Any(),它返回此方法返回的布尔值的整数值。

foreach (var week in xelem)
{
int groupNumber = Convert.ToInt32(week.Elements("groupNumber").FirstOrDefault().Value);
string startTime = week.Elements("starttime").FirstOrDefault().Value;
int startDay = Convert.ToInt32(week.Elements("startday").FirstOrDefault()?.Value);
string endTime = week.Elements("endtime").FirstOrDefault().Value;
int endDay = Convert.ToInt32(week.Elements("endday").FirstOrDefault().Value);
Console.WriteLine(groupNumber);
Console.WriteLine(startTime);
Console.WriteLine(startDay);
Console.WriteLine(endTime);
Console.WriteLine(endDay);
Console.WriteLine("rn");
}

执行此操作时,您可能还希望添加对null的检查,除非您可以保证XML将存在这些检查。可以这样做的一种方法是使用?运算符。

int startDay = Convert.ToInt32(xelem.Elements("startday").FirstOrDefault()?.Value);    

最新更新