<root>
<schedules>
<idle>3600000</idle>
<schedule>
<dic>e:\</dic>
<schedulename>dhdp</schedulename>
<configfile>dhdpconfig.xml</configfile>
</schedule>
<schedule>
<dic>e:\</dic>
<schedulename>logdhdp</schedulename>
<configfile>logdhdpconfig.xml</configfile>
</schedule>
</schedules>
</root>
{
public string dic { get; set; }
public string schedulename { get; set; }
public string configfile { get; set; }
}
class Schedules
{
public int Idle { get; set; }
public List<Schedule> ScheduleList { get; set; }
}
{
static void Main(string[] args)
{
var xmlfn = @"Schedules.xml";
TestScheduleList(xmlfn);
TestSchedulesList(xmlfn);
TestSchedulesList2(xmlfn);
Console.ReadKey();
}
public static void TestScheduleList(string xmlfn)
{
XElement SchedulesXml = XElement.Load(xmlfn);
List<Schedule> ScheduleList = (
from ScheduleElement in SchedulesXml.Elements("schedules").Descendants("schedule")
select new Schedule
{
dic = ScheduleElement.Element("dic").Value,
schedulename = ScheduleElement.Element("schedulename").Value,
configfile = ScheduleElement.Element("configfile").Value
}
).ToList();
Console.WriteLine("测试ScheduleList");
foreach (var sc in ScheduleList)
{
Console.WriteLine(sc.configfile);
}
Console.ReadKey();
}
public static void TestSchedulesList(string xmlfn)
{
XElement SchedulesXml = XElement.Load(xmlfn);
var SchedulesList = from SchedulesElement in SchedulesXml.Elements("schedules")
select SchedulesElement;
Console.WriteLine("测试SchedulesList");
foreach (var scs in SchedulesList)
{
Console.WriteLine(scs.Value);
}
Console.ReadKey();
}
public static void TestSchedulesList2(string xmlfn)
{
XElement SchedulesXml = XElement.Load(xmlfn);
var SchedulesList = from SchedulesElement in SchedulesXml.Elements("schedules")
select new Schedules
{
Idle = (int)SchedulesElement.Element("Idle"),
ScheduleList = (
from ScheduleElement in SchedulesElement.Descendants("schedule")
select new Schedule
{
dic = ScheduleElement.Element("dic").Value,
schedulename = ScheduleElement.Element("schedulename").Value,
configfile = ScheduleElement.Element("configfile").Value
}
).ToList()
};
Console.WriteLine("测试SchedulesList");
foreach (var scs in SchedulesList)
{
Console.WriteLine(scs.ScheduleList.ToString());
}
Console.ReadKey();
}
}
在使用TestSchedulesList2有错误,不知怎样调试,错误如下:
未处理 System.ArgumentNullException
Message="值不能为空。\r\n参数名: element"
Source="System.Xml.Linq"
ParamName="element"
StackTrace:
在 System.Xml.Linq.XElement.op_Explicit(XElement element)
在 ConsoleApplication1.Program.<TestSchedulesList2>b__7(XElement SchedulesElement) 位置 D:\web\ConsoleApplication1\ConsoleApplication1\Program.cs:行号 170
在 System.Linq.Enumerable.WhereSelectEnumerableIterator`2.MoveNext()
在 ConsoleApplication1.Program.TestSchedulesList2(String xmlfn) 位置 D:\web\ConsoleApplication1\ConsoleApplication1\Program.cs:行号 186
在 ConsoleApplication1.Program.Main(String[] args) 位置 D:\web\ConsoleApplication1\ConsoleApplication1\Program.cs:行号 129
在 System.AppDomain._nExecuteAssembly(Assembly assembly, String[] args)
在 System.AppDomain.ExecuteAssembly(String assemblyFile, Evidence assemblySecurity, String[] args)
在 Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssembly()
在 System.Threading.ThreadHelper.ThreadStart_Context(Object state)
在 System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state)
在 System.Threading.ThreadHelper.ThreadStart()
InnerException:
经过大家的提醒,终于找到原因了,XML是要区分大小写的,我将idle写成了Idle了,改后运行正常了。
{
XElement SchedulesXml = XElement.Load(xmlfn);
var SchedulesList = from SchedulesElement in SchedulesXml.Elements("schedules")
select new Schedules
{
Idle = int.Parse(SchedulesElement.Element("idle")
![](https://www.cnblogs.com/Emoticons/msn/48_48.gif)
ScheduleList =
(from ScheduleElement in SchedulesElement.Descendants("schedule")
select new Schedule
{
dic = ScheduleElement.Element("dic").Value,
schedulename = ScheduleElement.Element("schedulename").Value,
configfile = ScheduleElement.Element("configfile").Value
}
).ToList()
};
Console.WriteLine("测试SchedulesList");
foreach (var scs in SchedulesList)
{
Console.WriteLine(scs.ScheduleList[0].schedulename);
}
Console.ReadKey();
}