【问题标题】:Read all xml files in a folder and save them in a datatable读取文件夹中的所有 xml 文件并将它们保存在数据表中
【发布时间】:2016-12-11 13:40:54
【问题描述】:

我有一个包含一堆文件的文件夹,我想读取和解析这些文件并将一些值保存到我将插入 SQL 数据库的表中。该文件夹看起来像这样。 C:\文档\车辆。在文件夹中,我有如下文件: BMW.xml、奥迪.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;             
        }


    }
}

【问题讨论】:

  • 您的代码似乎有问题。但是,除非我们有 code or information that can reproduce the problem,否则我们无能为力。否则,我们只是在盲目猜测。
  • 我还没有写任何代码。我不知道如何开始。
  • Stack Overflow 不是一个可以完成所有工作的好网站。你应该做一些努力,例如阅读MSDN。这应该总是让你开始。请使用the checklist改进帖子,至少将图片替换为xml用户可以复制粘贴...
  • 我不是要你做所有的工作。我需要关于我应该如何前进的建议。我试过 MSDN,但我不明白。这就是我在这里问的原因。
  • 您似乎希望 Stackoverflow 上的人帮您解决大学作业。请努力并在每一步都使用google,您可以google如何解析/反序列化xml文件/数据,然后google如何将数据放入数据库。

标签: c# sql-server winforms xml-parsing xmlreader


【解决方案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 将对象直接插入数据库。

(还有一点,永远不要在按钮事件中实现你的逻辑),这是一种不好的做法。

如果对你有用,请将其标记为答案

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-04-01
    • 1970-01-01
    • 1970-01-01
    • 2019-10-18
    • 2015-04-02
    • 2021-08-31
    • 2014-06-06
    • 2015-09-10
    相关资源
    最近更新 更多