2012-09-09 94 views
3

我一直對這個問題進行了幾個小時,現在我已經沒有運氣的解決方案:(搜索各地下一個節點

我所試圖做的是打印出節點的名稱,我有什麼是節點的存在,所以我知道有多少次循環,但我有最艱難的時期檢索值

我已經試過量:

int num = Convert.ToInt32(queuecount); 
var jobs = QueueXML.SelectSingleNode(xpathjobsfilename).InnerText; 
PreviousQueue = jobs.ToString(); 

//foreach(loop < num) 
//{ 
// if (CurrentQueue == PreviousQueue) 
// { 

// } 
// else 
// { 
//  resultsListView.Items.Clear(); 
//  resultsListView.Items.Add(jobs[num]); 
// } 
// loop++; 
//} 

foreach (char JobName in jobs.ToString()) 
{ 
    if (CurrentQueue == PreviousQueue) 
    { 
    } 
    else 
    { 
     resultsListView.Items.Clear(); 
     resultsListView.Items.Add(jobs[num]); 
    } 
} 

編輯:示例XML

<jobs> 
    <job> 
     <timeleft>0:00:00</timeleft> 
     <mb>1419.60536003</mb> 
     <msgid></msgid> 
     <filename>Extended_Final</filename> 
     <mbleft>1274.33209419</mbleft> 
     <id>nzo_i7qxxq</id> 
    </job> 
    <job> 
     <timeleft>0:00:00</timeleft> 
     <mb>9.22459220886</mb> 
     <msgid></msgid> 
     <filename>Video2</filename> 
     <mbleft>9.22459220886</mbleft> 
     <id>2m3dv5</id> 
    </job> 
    </jobs> 

我想通過你的工作節點來檢索作業詳細信息爲每個工作

+0

您可以顯示和示例XML結構以及您正在查找的結果嗎? – Jan

+0

我剛剛用一個例子編輯了原始問題 – KPS

+0

你想要提取什麼? – Jan

回答

1

使用LINQ2XML

XElement doc=XElement.Load("yourXMLfile.xml"); 

string timeleft,mb,msgid,filename,mbleft,id; 

foreach(XElement elm in doc.Descendants().Elements("job")) 
{ 
    timeleft = elm.Element("timeleft").Value; //time left value 
    mb = elm.Element("mb").Value; //mb value 
    msgid = elm.Element("msgid").Value; //msgid value 
    filename = elm.Element("filename").Value; //filename value 
    mbleft = elm.Element("mbleft").Value; //mbleft value 
    id = elm.Element("id").Value; //id value 
} 
+0

我得到這個錯誤: 錯誤只有分配,調用,遞增,遞減,在等待着,新對象表達式可以用作聲明 – KPS

+0

@KPS看看我的編輯答案 – Anirudha

+0

@KPS的錯誤造成的,因爲你是不將值分配給任何東西..將所有值賦給字符串... – Anirudha

2

使用此代碼迴路。

XmlDocument doc = new Windows.Data.Xml.Dom.XmlDocument(); 
doc.Load(@"/path/to/xml/file"); 

foreach (XmlNode job in doc.SelectNodes("/jobs/job")) 
{ 
    string filename = job.SelectSingleNode("filename").InnerText; 
    double mbleft = double.Parse(job.SelectSingleNode("mbleft").InnerText); 
} 

我不太清楚你想用它做什麼。如果您想在整個程序中使用這些信息,我會創建一個作業數據類型並將XML文檔解析爲List<Job>。無論如何,上述代碼將使您能夠訪問您之後的信息。

+0

嗯,這是一個地鐵應用程序,我試圖做,似乎XmlNode命名空間不可用 – KPS

+0

我已更新我的代碼的第一行。那樣有用嗎? – Jan

+0

錯誤無法找到類型或名稱空間名稱'XmlNode'(您是否缺少using指令或程序集引用?) – KPS

0

下面是對個人工作細節添加到字典的列表的代碼。 當有很多子節點時,它消除了在循環中選擇單個節點。而且,更通用。

System.Xml.XmlDocument doc = new System.Xml.XmlDocument(); 
doc.LoadXml(yourXmlString);    
if (doc.HasChildNodes) 
{ 
    System.Xml.XmlNodeList jobLst = doc.DocumentElement.ChildNodes; 
    System.Collections.Generic.Dictionary<string, string> jobDescription; 
    var lstjobDescription = new System.Collections.Generic.List<System.Collections.Generic.Dictionary<string, string>>(); 
    string name; 
    for (int i = 0; i < jobLst.Count; i++) 
    { 
     var responseDoc = new System.Xml.XmlDocument(); 
     responseDoc.LoadXml(jobLst[i].OuterXml); 
     jobDescription = new System.Collections.Generic.Dictionary<string, string>(); 
     foreach (System.Xml.XmlNode node in responseDoc.SelectNodes("//job/*")) //select all nodes of Job 
     {     
      jobDescription.Add(node.Name, node.InnerText); 
     } 
     lstjobDescription.Add(jobDescription);      
    } 
}   
相關問題