2016-03-08 32 views
0

我正在閱讀XML文件,以便我可以獲得製作Windows服務所需的全部信息。如何將每個XmlElement放入XmlNodeList中,然後讀取其屬性及其值

問題是,我必須讀取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); 
     } 
+0

道歉,這不回答你的問題,但你在做什麼會使用LINQ到XML是非常容易。將你的Xml加載到一個XDocument中,並使用Linq來查詢它所需的XElements。這些屬性只是XElement上的XAttribute對象的集合。 – Kevin

+0

@Kevin我必須這樣做,而不使用linq –

+0

你有沒有嘗試在第二行停下來,並調試,以查看列表中最終有多少任務? – Kevin

回答

0

像這樣的東西可能:

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; 
    } 
+0

當我輸出的值,task1值都很好,但task2的'starttime','repeat'和'endtime'與taks1相同。 –

+0

你是否爲任務2獲得了正確的taskName和taskType? – Kevin

+0

是的,但是發生的屬性與他們先前的任務相同。 –

相關問題