2016-08-05 157 views
0

我有一堆文件的文件夹,我想读取和解析并将一些值保存到一个表中,我将插入到SQL数据库中。该文件夹看起来像这样。 C:\文档\车辆。而文件夹里面我有这样的文件: BMW.xml,Audi.xml,Volvo.xml ,其中的每个文件有一大堆的节点,但该节点在看起来像即时通讯兴趣:阅读一个文件夹中的所有xml文件,并将它们保存在一个数据表中

<FpcBlock Version="01"> 
     <FPC Name="1" Value="A" Updated="false" /> 
     <FPC Name="3" Value="B" Updated="false" /> 
<FpcBlock Version="01"> 

我想保存的FPC名称和值插入到一个表,应该是这样的:

Datatable example

这应该继续,直到读取所有的值,然后我想继续到下一个文件,该文件是奥迪并继续填写表格。 目前我还没有设法读取第一个文件。任何想法我应该继续前进?

我当前的代码:

public partial class Form1 : Form 
{ 
    XmlDocument doc = new XmlDocument(); 
    DirectoryInfo difo = new DirectoryInfo(@"C:\Users\ahodhv\Perforce\ahodhv_RD0029717_1921\prod\delivery\q_rec\int_test\SOPS"); 
    public Form1() 
    { 
     InitializeComponent(); 
    } 

    private void Form1_Load(object sender, EventArgs e) 
    { 

    } 

    private void button1_Click(object sender, EventArgs e) 
    { 
     FileInfo[] Files = difo.GetFiles("*.xml");    
     string[] parts; 

     foreach (FileInfo File in Files) 
     { 
      parts = File.Name.Split('_');            
      boxvehicles.Items.Add(parts[0]); 
      doc.Load(File.DirectoryName); 
      XmlNode node = doc.DocumentElement.SelectSingleNode("FpcBlock Version"); 
      string text = node.InnerText;    
     } 


    } 
} 
+0

看起来您的代码有问题。但是,除非我们有[可以重现问题的代码或信息](// stackoverflow.com/help/mcve),否则我们无能为力。否则,我们只是盲目猜测。 – rene

+0

我还没有写任何代码。我不知道如何开始。 –

+0

堆栈溢出不是一个伟大的网站来做你所有的工作。你应该做一些努力,例如阅读[MSDN](https://msdn.microsoft.com/en-us/library/2kzb96fk.aspx)。这应该总是让你开始。请使用[清单](http://meta.stackoverflow.com/questions/260648/stack-overflow-question-checklist)来改善帖子,并至少用xml替换图片用户可以复制粘贴... – rene

回答

1

好吧,首先你的XML是错误的,它应该是这样的

<?xml version="1.0" encoding="utf-8"?> 
<FpcBlock Version="01"> 
     <FPC Name="1" Value="A" Updated="false" /> 
     <FPC Name="3" Value="B" Updated="false" /> 
     <FPC Name="5" Value="B" Updated="false" /> 
     <FPC Name="8" Value="B" Updated="false" /> 
     <FPC Name="10" Value="B" Updated="false" /> 
     <FPC Name="11" Value="A" Updated="false" /> 
     <FPC Name="14" Value="Q" Updated="false" /> 
</FpcBlock> 

然后,你需要创建一个C#对象来反序列化的XML。

[Serializable()] 

    [XmlRoot(ElementName = "FPC")] 
    public class FPC 
    { 
     [XmlAttribute(AttributeName = "Name")] 
     public string Name { get; set; } 
     [XmlAttribute(AttributeName = "Value")] 
     public string Value { get; set; } 
     [XmlAttribute(AttributeName = "Updated")] 
     public string Updated { get; set; } 
    } 

    [XmlRoot(ElementName = "FpcBlock")] 
    public class FpcBlock 
    { 
     [XmlElement(ElementName = "FPC")] 
     public List<FPC> FPC { get; set; } 
    } 

然后拨打电话这样

static void Main(string[] args) 
     { 

      FpcBlock cars = null; 
      var path = @"C:\temp\car.xml"; 

      var serializer = new XmlSerializer(typeof(FpcBlock)); 

      var reader = new StreamReader(path); 
      cars = (FpcBlock)serializer.Deserialize(reader); 
      reader.Close(); 
     } 

我已经测试此代码,它的工作原理就像一个魅力。现在,您不需要将它们放入数据表中然后放入数据库中,那么可以使用EntityFrameWork将对象直接插入到数据库中。

(还有一件事,切勿在按钮事件中执行您的逻辑),这是不好的做法。

如果它有效,请将其标记为答案

+0

谢谢你的帮助!我会将其标记为答案。 –

相关问题