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 に答える