C# 读取多个XML文件

C# 读取多个XML文件,c#,.net,xml,xmldocument,xmltextreader,C#,.net,Xml,Xmldocument,Xmltextreader,我创建了一个小型XML工具,用于查找多个XML文件中存在的元素数量 这段代码为XML文件中必须包含的元素提供了良好的结果 但当涉及到XML文件中可能存在或不存在的特定元素时,软件会给出如下结果: 10/8/2012 11:27:51 AM C:\Documents and Settings\AlaspuMK\Desktop\KS\success\4CPK-PMF0-004D-P565-00000-00.xml Instance: 0 10/8/2012 11:27:51 AM C:\Docu

我创建了一个小型XML工具,用于查找多个XML文件中存在的元素数量

这段代码为XML文件中必须包含的元素提供了良好的结果

但当涉及到XML文件中可能存在或不存在的特定元素时,软件会给出如下结果:

10/8/2012 11:27:51 AM
C:\Documents and Settings\AlaspuMK\Desktop\KS\success\4CPK-PMF0-004D-P565-00000-00.xml 
Instance: 0

10/8/2012 11:27:51 AM
C:\Documents and Settings\AlaspuMK\Desktop\KS\success\4CPK-PMF0-004D-P566-00000-00.xml 
Instance: 0

10/8/2012 11:27:51 AM
C:\Documents and Settings\AlaspuMK\Desktop\KS\success\4CPK-PMF0-004D-P567-00000-00.xml 
Instance: 0

10/8/2012 11:27:51 AM
C:\Documents and Settings\AlaspuMK\Desktop\KS\success\4CPK-PMG0-004D-P001-00000-00.xml 
**Instance: 11**

10/8/2012 11:27:51 AM
C:\Documents and Settings\AlaspuMK\Desktop\KS\success\4CPK-PMG0-004D-P002-00000-00.xml 
Instance: 0
现在这里的问题是,当我搜索可能存在或不存在的标记时,XML文件可能是500-1000。工具会为每个文件提供结果。在这种情况下,特定的标记当前实例可以是0或多个

任何人都可以建议更改我的代码以查找实例大于0的文件名。如果实例>0,则在文本框中打印它

我当前的代码:

public void SearchMultipleTags()
        {
            if (txtSearchTag.Text != "")
            {
                try
                {
                    //string str = null;
                    //XmlNodeList nodelist;
                    string folderPath = textBox2.Text;
                    DirectoryInfo di = new DirectoryInfo(folderPath);
                    FileInfo[] rgFiles = di.GetFiles("*.xml");
                    foreach (FileInfo fi in rgFiles)
                    {
                        int i = 0;
                        XmlDocument xmldoc = new XmlDocument();
                        xmldoc.Load(fi.FullName);
                        //rtbox2.Text = fi.FullName.ToString();

                        foreach (XmlNode node in xmldoc.GetElementsByTagName(txtSearchTag.Text))
                        {

                            i = i + 1;

                            //
                        }
                        rtbox2.Text += DateTime.Now + "\n" + fi.FullName + " \nInstance: " + i.ToString() + "\n\n";
                        //rtbox2.Text += fi.FullName + "instances: " + str.ToString();
                    }

                }
                catch (Exception ex)
                {

                    MessageBox.Show("Invalid Path or Empty File name field.");


                }
            }
            else
            {
                MessageBox.Show("Dont leave field blanks.");
            }

        }
使用

而不是简单的

rtbox2.Text += DateTime.Now + "\n" + fi.FullName + " \nInstance: " + i.ToString() + "\n\n";

如果我理解正确,是否仅在I大于0时才显示文本

if(i > 0 )
rtbox2.Text += DateTime.Now + "\n" + fi.FullName + " \nInstance: " + i.ToString() + "\n\n";

您可以始终在try块中使用以下代码:

rtbox2.Text =
    String.Join(Environment.NewLine + Environment.NewLine,
        from fi in (new DirectoryInfo(textBox2.Text)).GetFiles("*.xml")
        let xd = XDocument.Load(fi.FullName)
        let i = xd.Descendants(txtSearchTag.Text).Count()
        where i > 0
        select String.Join(Environment.NewLine, new []
        {
            DateTime.Now.ToString(),
            fi.FullName,
            i.ToString(),
        }));

所有内容都在一行中(格式除外)。:-)

我还没有试过,但我认为这段代码很小很简单,执行的任务与我冗长的代码执行的任务相同。仪式?@MayurAlaspure-没错。它还包括
i>0
,以消除不符合条件的XML文件。感谢您的回复,我也将尝试此操作。:)谢谢你的回复,我也会试试这个
rtbox2.Text =
    String.Join(Environment.NewLine + Environment.NewLine,
        from fi in (new DirectoryInfo(textBox2.Text)).GetFiles("*.xml")
        let xd = XDocument.Load(fi.FullName)
        let i = xd.Descendants(txtSearchTag.Text).Count()
        where i > 0
        select String.Join(Environment.NewLine, new []
        {
            DateTime.Now.ToString(),
            fi.FullName,
            i.ToString(),
        }));