阅读一个文件夹中的所有xml文件,并将它们保存在一个数据表中
问题描述:
我有一堆文件的文件夹,我想读取和解析并将一些值保存到一个表中,我将插入到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名称和值插入到一个表,应该是这样的:
这应该继续,直到读取所有的值,然后我想继续到下一个文件,该文件是奥迪并继续填写表格。 目前我还没有设法读取第一个文件。任何想法我应该继续前进?
我当前的代码:
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;
}
}
}
答
好吧,首先你的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
谢谢你的帮助!我会将其标记为答案。 –
看起来您的代码有问题。但是,除非我们有[可以重现问题的代码或信息](// *.com/help/mcve),否则我们无能为力。否则,我们只是盲目猜测。 – rene
我还没有写任何代码。我不知道如何开始。 –
堆栈溢出不是一个伟大的网站来做你所有的工作。你应该做一些努力,例如阅读[MSDN](https://msdn.microsoft.com/en-us/library/2kzb96fk.aspx)。这应该总是让你开始。请使用[清单](http://meta.*.com/questions/260648/stack-overflow-question-checklist)来改善帖子,并至少用xml替换图片用户可以复制粘贴... – rene