2012-09-09 52 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);      
    } 
}   
相关问题