< 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 " )

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