我已经在这个问题上工作了几个小时了,我已经四处寻找没有运气的解决方案:(
我想要做的是打印出节点的名称,我所拥有的是存在的节点数量,所以我知道要循环多少次但是最难检索值
我尝试过:
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 :(得分: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>
。在任何情况下,上述代码都可以让您访问您所追求的信息。
答案 1 :(得分: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
}
答案 2 :(得分: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);
}
}