【发布时间】:2016-03-08 19:23:09
【问题描述】:
我正在读取 XML 文件,以便获得创建 Windows 服务所需的所有信息。
问题是,我必须读取 XmlNodeList 中的所有任务,然后迭代到每个 Task 元素并读取属性。
我的 XML 文件如下所示:
<Tasks>
<Task name="taskname1" type="tasktype1">
<Occurrence starttime="09:00" repeat="01:00" endtime="17:00" />
<FreeSpace disk=”C” />
</Task>
<Task name="taskname2" type="tasktype2">
<Occurrence startime="11:00" repeat="00:05" endtime="13:00" />
</Task>
</Tasks>
所以我想要的是每个任务都将保存在一个 xmlNodeList 中,然后对于每个任务我必须读取它的子元素属性和它的值。
到目前为止,我所取得的成就是,我只能获得第一个任务的价值,即 C 上的可用空间。
我的代码只是读取第一个任务。
XmlNodeList xnList = xmlDoc.SelectNodes("/Tasks/Task");
foreach (XmlNode task in xnList)
{
taskName = task.Attributes["name"].Value;//Name
taskType = task.Attributes["type"].Value;//Type
Console.WriteLine(taskName + " " + taskType);
}
XmlNodeList List = xmlDoc.SelectNodes("/Tasks/Task/Occurrence");
foreach (XmlNode task1 in List)
{
taskStartTime = task1.Attributes["starttime"].Value;//starttime
taskRepeat = task1.Attributes["repeat"].Value;//rpt
taskEndTime = task1.Attributes["endtime"].Value;//endtime
Console.WriteLine(taskStartTime + " " + taskRepeat + " " + taskEndTime);
}
【问题讨论】:
-
很抱歉,这并不能回答您的问题,但是使用 Linq to Xml 您正在做的事情会变得非常容易。将您的 Xml 加载到 XDocument 中,然后使用 Linq 查询它以获取所需的 XElement。然后,这些属性只是 XElement 上 XAttribute 对象的集合。
-
@Kevin 我必须在不使用 linq 的情况下这样做
-
您是否尝试过在第二行停止并调试以查看您最终在列表中完成了多少任务?
-
我的代码正在读取两个任务的
taskName和taskType,以及任务1 的Occurrence。然后它给了我 NullReferenceException。 -
我了解您的代码正在尝试什么。您的 for 循环看起来不错,所以我怀疑您出于某种原因只在 xnList 中获得了一个 XmlNode,我要求您使用 IDE 的调试模式来确认或拒绝该断言。
标签: c# xml xmldocument