2012-10-10 4 views
0

J'ai créé un petit outil XML qui me donne le nombre de balises XML spécifiques provenant de plusieurs fichiers XML.Lecture de texte spécifique à partir de fichiers XML

Le code pour c'est comme suit:

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; 

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

         } 
         else 
         { 
          //MessageBox.Show("No Markup Found."); 
         } 

         //rtbox2.Text += fi.FullName + "instances: " + str.ToString(); 
        } 

       } 
       catch (Exception) 
       { 

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


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

     } 

Ce code me retourne les comptes de balises dans des fichiers XML multiples qui veut l'utilisateur.

Maintenant la même chose que je veux rechercher un texte particulier et son nombre présent dans les fichiers XML.

Pouvez-vous suggérer le code en utilisant des classes XML.

Merci et salutations, Mayur Alaspure

+0

: qu'est-ce que vous essayez Mayur? Votre article précédent http://stackoverflow.com/questions/12776198/reading-multiple-xml-files contenait également le même extrait de code. Qu'avez-vous essayé avant de poser une question? –

+0

@MilindThakkar: Celui-ci était pour le balisage spécifique et maintenant je cherche un texte spécifique dans le fichier XML. Et merci pour votre réponse précédente cela fonctionne et j'utilise votre code seulement. –

+0

Deux points Mayur: Premièrement, je ne vois aucun changement dans l'extrait de code donné dans l'autre question et celle-ci. Si douteux de ce que vous avez essayé de faire avant de poser une question ici. Deuxièmement, si vous êtes satisfait de la réponse de n'importe qui, vous devriez marquer cela comme "réponse" et/ou "upvote" .- Milind –

Répondre

0

Utilisez LINQ2XML instead..It simples et de remplacement complet API XML othe de

XElement doc = XElement.Load(fi.FullName); 

//count of specific XML tags 
int XmlTagCount=doc.Descendants().Elements(txtSearchTag.Text).Count(); 

//count particular text 

int particularTextCount=doc.Descendants().Elements().Where(x=>x.Value=="text2search").Count(); 
+0

Merci beaucoup votre code me donne le compte de tag particulier dans le fichier XML. mais je veux rechercher un texte particulier dans les fichiers XML. –

+0

@MayurAlaspure consultez la deuxième partie du code dans les années – Anirudha

+0

Merci beaucoup. :) –

0

System.Xml.XPath.

Xpath prend en charge le comptage: comptage (// nodeName)

Si vous voulez compter les noeuds avec un texte spécifique, essayez

count(//*[text()='Hello'])

Voir How to get count number of SelectedNode with XPath in C#?

Par ailleurs, votre fonction devrait ressembler probablement quelque chose plus comme ceci:

private int SearchMultipleTags(string searchTerm, string folderPath) { ... 
     //... 
     return i; 
} 
0

Essayez d'utiliser XPath:

//var document = new XmlDocument(); 
int count = 0; 
var nodes = document.SelectNodes(String.Format(@"//*[text()='{0}']", searchTxt)); 
if (nodes != null) 
    count = nodes.Count; 
Questions connexes