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

巴勃罗·塞萨尔·莫德斯托

下午好,我的问题是:

我正在编写代码以:

  1. 读取多个文件:如果我选择多个文件,则程序只能读取一个文件,那么我只能使用openfiledialog读取一个文件,我想我可以使用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

该programa取第一行并在不同的列中进行迭代,我如何订购呢?

这是我的XML文件的示例:

XML文件

这是代码:

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);
        }
    }
}

请帮忙。谢谢你。最好的祝福。

har07

不要期望完整的代码,因为您的问题对那个1太广泛了但是,这是同时满足这两个要求的要点:

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

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

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

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

尝试相对路径:

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

或简单地:

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

您可能需要考虑在完全知道不超过一个节点满足XPath的情况下SelectSingleNode()进行替换SelectNodes()

1)针对每个特定问题发布单独的问题。并且,不要创建所有最小的代码和完整的XML文件内容,而是尝试创建一个最小,完整和可验证的示例该示例将有助于澄清问题,尤其是当我们在写英语方面有局限性时(除了在此站点之外,我几乎从不会写/说英语:p)。在创建示例的过程中,您可能会学到一些东西,甚至自己找到解决方案

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章