2014-09-05 34 views
0

嗨大家下午好,我的问题是:读取多个XML文件和订购列表视图

我写代码来:

  1. 读取多个文件:用打开文件对话框,如果我选择更多的人生指明只读一个文件比一个程序只需要一个,我想我可以使用一个foreach但我不知道如何实现。

  2. 订单的XML节点到一个列表视图中,我有一个列表视图和输出必须是这样的:


Test Name  Limit Judgment Measurement High Limit  Low Limit 
Main__checkt  0     3    5   3 
Main__Initia  0     4    4   3 
Main__Serial  0     3    4   3 

但我的输出是这样的:


Test Name  Limit Judgment Measurement High Limit  Low Limit 
Main__Initia  0     3    5   3 
Main__Serial  0     3    5   3 
Main__Cylind  0     3    5   3 

该程序将第一行和第一行在不同的列如何我可以订购?

这是我的XML文件的样本:

XML FILE

这是代码:

private void button1_Click(object sender, EventArgs e) 
{ 
    OpenFileDialog ofd = new OpenFileDialog(); 
    ofd.Filter = "XML | *.xml"; 
    ofd.Multiselect = true; 
    ofd.ShowDialog(); 
    XmlDocument xml = new XmlDocument(); 
    xml.Load(ofd.FileName); // suppose that myXmlString contains "<Names>...</Names>" 
    ListViewItem lvi; 

    XmlNodeList xnList = xml.SelectNodes("/LogBatch/LogTestplan/LogTest"); 
    foreach (XmlNode xn in xnList) 
    { 

     string tnam = xn["TestName"].InnerText; 

     lvi = new ListViewItem(); 
     lvi.Text = tnam; 
     listView1.Items.Add(lvi); 

     XmlNodeList xnList2 = xml.SelectNodes("/LogBatch/LogTestplan/LogTest/LogLimit"); 
     foreach (XmlNode xn2 in xnList2) 
     { 

      string limjud = xn2["LimitJudgment"].InnerText; 
      string limlm = xn2["LimitLastMeasuredValue"].InnerText; 
      string limhl = xn2["LimitHighLimit"].InnerText; 
      string limlw = xn2["LimitLowLimit"].InnerText; 

      lvi.SubItems.Add(limjud); 
      lvi.SubItems.Add(limlm); 
      lvi.SubItems.Add(limhl); 
      lvi.SubItems.Add(limlw); 
      string nomval = "4"; 
      lvi.SubItems.Add(nomval); 
      string devstd = "0.46291"; 
      lvi.SubItems.Add(devstd); 
      string cp = "0.72"; 
      lvi.SubItems.Add(cp); 
     } 
    } 
} 

请帮助。 谢谢。 最好的问候。

回答

0

不要指望完整的代码,因为你的问题太宽泛了。但这里的要点完成两方面的要求:

  1. 使用Multiselect模式,你应该检查FileDialog.FileNames,而不是单一FileName财产。此时,您必须能够轻松地遍历FileNames并将它们中的每一个加载到XmlDocument对象中。

  2. 为了获得对应于当前<LogTest>在你的外在foreach循环,你应该使用相对的XPath当前<LogLimit><LogLimit>节点。

因此,而不是使用完整路径:

XmlNodeList xnList2 = xml.SelectNodes("/LogBatch/LogTestplan/LogTest/LogLimit"); 

尝试相对路径:

XmlNodeList xnList2 = xn.SelectNodes("./LogLimit"); 

或者干脆:

XmlNodeList xnList2 = xn.SelectNodes("LogLimit"); 

你可能要考虑SelectSingleNode()更换SelectNodes()在上下文中,您确切知道不会有多个节点满足XPath。

1)针对每个特定问题分别提出问题。而不是抛出所有的代码和完整的XML文件内容,请尝试create a Minimal, Complete, and Verifiable example。这个例子将有助于澄清这个问题,特别是当我们在写作英语方面有限制时(除了在这个网站,我几乎不会写/说英语:p)。你可能会在创建示例的过程中自己学到东西甚至找到解决方案

+0

非常感谢您的帮助,我会按照您的建议:)即时新的论坛写作,我在这里学到很多东西。 – 2014-09-06 19:55:05