如何将每个 XmlElement 放在 XmlNodeList 中,然后读取其属性及其值

How to put each XmlElement in XmlNodeList and then read its attributes and its values

我正在阅读 XML 文件,以便我可以获得创建 windows 服务所需的所有信息。

问题是,我必须读取 XmlNodeList 中的所有任务,然后迭代到每个任务元素并读取属性。

我的 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 中,然后对于每个任务我必须读取它的子元素属性及其值。

到目前为止我所取得的成就是,我已经能够获得第一个免费任务的价值 space 在 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);
        }

也许是这样的:

    XmlNodeList xnList = xmlDoc.SelectNodes("/Tasks/Task");
    foreach (XmlNode task in xnList)
    {
        taskName = task.Attributes["name"].Value;//Name
        taskType = task.Attributes["type"].Value;//Type
        if(task.HasChildNodes)
        {
            XmlNodeList child = task.ChildNodes();
            if(child != null)
            {
                taskStartTime = child[0].Attributes["starttime"].Value;//starttime
                taskRepeat = child[0].Attributes["repeat"].Value;//rpt
                taskEndTime = child[0].Attributes["endtime"].Value;//endtime
            }
        }
        // Do your output here where you have all the values for a task
        // Make sure you print before the next line, it will clear out the attribute values.
        taskStartTime = taskRepeat = taskEndTime = string.Empty;
    }