读取多个XML文件和订单列表视图

时间:2014-09-05 19:16:13

标签: c# xml xml-parsing multiple-columns openfiledialog

下午好,我的问题是:

我正在编写代码:

  1. 读取多个文件:我只能用openfiledialog读取一个文件如果我选择多个程序只需要一个,我想我可以使用foreach但我不知道如何实现。

    < / LI>
  2. 将xml节点排序到列表视图中,我有一个列表视图,输出必须是这样的:


  3. 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
    

    programa接受第一行并在不同的列中迭代我如何订购它?

    这是我的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);
            }
        }
    }
    

    请帮助。 谢谢。 最诚挚的问候。

1 个答案:

答案 0 :(得分:0)

不要期望完整的代码,因为你的问题对于 1 而言过于宽泛。但以下是完成这两个要求的要点:

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

  2. 要在外部<LogLimit>循环中获取与当前<LogTest>对应的foreach节点,您应该使用相对于当前<LogLimit>的XPath。

    < / LI>

    所以不要使用完整路径:

    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)。您可以在创建示例

    的过程中自学或甚至找到解决方案
相关问题