2012-10-08 141 views
0

我已經創建了一個小型XML工具,用於查找多個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."); 
      } 

     } 

回答

0

如果我理解正確的話,你想只有當i大於顯示文本0?

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

感謝您的回覆,我也會嘗試。 :) –

0

使用

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

,而不是簡單的

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

感謝您的回覆,我也會試試。 :) –

0

你總是可以只使用此代碼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(), 
     })); 

它都在同一個線(BAR格式)。 :-)

+0

我還沒有嘗試過,但是,我認爲這個代碼是小而簡單的,並執行我冗長的代碼執行相同的任務。儀式? –

+0

@MayurAlaspure - 這是正確的。它還包含'i> 0'來消除不符合標準的XML文件。 – Enigmativity