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

本文关键字:单列表 列表 视图 读取 文件 XML | 更新日期: 2023-09-27 18:20:53

大家好,我的问题是:

我正在给写代码

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

请帮忙。非常感谢。顺致敬意,

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

不要期待完整的代码,因为你的问题太宽泛了,不适合1。但以下是实现这两个要求的要点:

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

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

因此,不使用完整路径:

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

尝试相对路径:

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

或者简单地说:

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

在您确切知道不会有超过一个节点满足XPath的情况下,您可能需要考虑使用SelectSingleNode()来替换SelectNodes()

1) 针对每个特定问题分别提出问题。与其抛出所有代码和完整的XML文件内容,不如尝试创建一个最小、完整和可验证的示例。这个例子将有助于澄清这个问题,尤其是当我们在写英语方面有限制时(除了在这个网站上,我几乎从不写/说英语:p)。在创建示例

的过程中,您可能会学到一些东西,甚至自己找到解决方案