2014-07-04 18 views
0

裸露与我和我的编程技能。我可以从我的C盘加载多个XML文档,但我需要找到一种方法将某些东西放入循环中,这样我就可以解析所有的XML而不仅仅是第一个。使用xmldocument c解析多个xml文件#

using System; 
using System.IO; 
using System.Xml; 

public class Program 
{ 


    public static void Main() 
    { 

     string[] filePaths = Directory.GetFiles(@"C:\Users\r626890\Documents\BoxTesting\",  "*.xml"); 
     foreach (string files in filePaths) 
     Console.WriteLine("'{0}'",files); 
     Console.WriteLine(); 

     XmlDocument doc = new XmlDocument(); 
     string file = filePaths[0].ToString(); 
     XmlNodeList xmlnode; 
     doc.Load(file); 

     XmlNodeList indexValue = doc.GetElementsByTagName("Index"); 

     for (int i = 0; i < indexValue.Count; i++) 
     { 
      Console.WriteLine(); 
      Console.WriteLine("Description: {0} ",    indexValue[i].ChildNodes.Item(0).InnerXml); 
      Console.WriteLine("Value:  {0} ", indexValue[i].ChildNodes.Item(1).InnerXml); 
     // Console.WriteLine("{0}",i); 
     } 

     xmlnode = doc.GetElementsByTagName("FileName"); 
     for (int i = 0; i < xmlnode.Count; i++) 
     { 
      // Console.WriteLine("URI: {0} ", elemList[i].InnerXml.Split('_')[0]); 
      Console.WriteLine(); 
      Console.WriteLine("Type:  {0} ", xmlnode[i].InnerXml.Split('_')[1]); 
      Console.WriteLine(); 
      Console.WriteLine("File Name: {0} ", xmlnode[i].InnerXml); 
          Console.WriteLine("------------------------------------------------------------"); 
      Console.WriteLine("(Total # of files: {0})", ++i); 
     } 



     Console.ReadLine(); 

    } 
} 

回答

0

你必须忘记的范围:

foreach (string files in filePaths) 

而且你必须装入原稿:由于文件被引用到

doc.Load(files); 

而不是

doc.Load(file); 

string file = filePaths[0].ToString(); 

因此它引用到集合文件路径的第一项(第一档)

我建议你重命名“文件”,“文件”,因为它不是一个集合,它只是一个迭代的项目你的收藏。

string[] filePaths = Directory.GetFiles(@"C:\Users\r626890\Documents\BoxTesting\",  "*.xml"); 
    foreach (string file in filePaths) 
    { 
     Console.WriteLine("'{0}'",file); 
     Console.WriteLine(); 

     XmlDocument doc = new XmlDocument(); 
     //string file = filePaths[0].ToString(); 
     XmlNodeList xmlnode; 
     doc.Load(file); 

     XmlNodeList indexValue = doc.GetElementsByTagName("Index"); 

     for (int i = 0; i < indexValue.Count; i++) 
     { 
      Console.WriteLine(); 
      Console.WriteLine("Description: {0} ",    indexValue[i].ChildNodes.Item(0).InnerXml); 
      Console.WriteLine("Value:  {0} ", indexValue[i].ChildNodes.Item(1).InnerXml); 
     // Console.WriteLine("{0}",i); 
     } 

     xmlnode = doc.GetElementsByTagName("FileName"); 
     for (int i = 0; i < xmlnode.Count; i++) 
     { 
      // Console.WriteLine("URI: {0} ", elemList[i].InnerXml.Split('_')[0]); 
      Console.WriteLine(); 
      Console.WriteLine("Type:  {0} ", xmlnode[i].InnerXml.Split('_')[1]); 
      Console.WriteLine(); 
      Console.WriteLine("File Name: {0} ", xmlnode[i].InnerXml); 
          Console.WriteLine("------------------------------------------------------------"); 
      Console.WriteLine("(Total # of files: {0})", ++i); 
     } 

    } 

    Console.ReadLine(); 
+0

那肯定解决了它。将整个事物放在foreach循环中是有道理的。另一个问题...我如何保持显示每个文件的计数? – user3806259

+0

如果你想保持计数,你必须使用:for(int i = 0; i csblo

+0

完美!感谢帮助! – user3806259