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>

我想检索每个工作的工作详细信息

4

3 回答 3

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>. 在任何情况下,上述代码都将使您能够访问您所追求的信息。

于 2012-09-09T03:53:41.213 回答
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
}
于 2012-09-09T03:59:15.630 回答
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);                       
    }
}        
于 2016-05-09T21:24:35.150 回答