2016-08-05 88 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

謝謝你的幫助!我會將其標記爲答案。 –

相關問題