c# -从XML到数据库

本文关键字:数据库 XML | 更新日期: 2023-09-27 18:18:54

我得到了一个XML文件,它可以有几个节点,子节点,"子节点",…我想弄清楚如何获得这些数据,以便将它们存储到我自己的SQL Server数据库中。

我在网上读了一些教程,也尝试了一些东西。目前,我能够打开和读取文件,但不能检索数据。下面是我所做的:

class Program
{
    static void Main(string[] args)
    {
        Person p = new Person();
        string filePath = @"C:'Users'Desktop'ConsoleApplication1'XmlPersonTest.xml";
        XmlDocument xmlDoc = new XmlDocument();
        if(File.Exists(filePath))
        {
            xmlDoc.Load(filePath);
            XmlElement elm = xmlDoc.DocumentElement;
            XmlNodeList list = elm.ChildNodes;
            Console.WriteLine("The root element contains {0} nodes",
                             list.Count);
        }
        else
        {
            Console.WriteLine("The file {0} could not be located",
                              filePath);
        }
        Console.Read();
    }
}

下面是我的XML文件的一个小例子:

<person>
    <name>McMannus</name>
    <firstname>Fionn</firstname>
    <age>21</age>
    <nationality>Belge</nationality>
    <car>
        <mark>Audi</mark>
        <model>A1</model>
        <year>2013</year>
        <hp>70</hp>
    </car>
    <car>
        <mark>VW</mark>
        <model>Golf 7</model>
        <year>2014</year>
        <hp>99</hp>
    </car>
    <car>
        <mark>BMW</mark>
        <model>Série 1</model>
        <year>2013</year>
        <hp>80</hp>
    </car>
</person>
有什么建议或指导吗?

c# -从XML到数据库

我使用XElement (Linq.Xml)编写了一个小方法来导航xml节点:

    public string Get(XElement root, string path)
    {
        if (root== null)
            return null;
        string[] p = path.Split(new string[] { "/" }, StringSplitOptions.RemoveEmptyEntries);
        XElement at = root;
        foreach (string n in p)
        {
            at = at.Element(n);
            if (at == null)
                return null;
        }
        return at.Value;
    }

使用它,您可以通过Get(root, "rootNode/nodeA/nodeAChild/etc")

获取XElement节点的值

我前几天也经历过类似的事情。您应该尝试以下操作,首先构建一个模型:

    打开XML文档
  1. 复制你的整个 XML文档。
  2. 打开Visual Studio.
  3. 点击初始类之外的区域(1b图)
  4. 在Visual Studio中选择编辑
  5. 粘贴特殊-粘贴为XML类

1 b:

 namespace APICore 
    {
         public class APIParser()
         {
              // Parse logic would go here.
         }
         // You would click here.
    }

当您这样做时,您将得到一个有效的XML模型,它可以通过解析器访问,如何选择访问XML Web或Local将取决于您。为了简单起见,我将选择一个文件:

public class APIParser(string file)
{
     // Person should be Xml Root Element Class.
     XmlSerializer serialize = new XmlSerializer(typeof(Person)); 
     using(FileStream stream = new FileStream(file, FileMode.Open, FileAccess.ReadWrite, FileShare.ReadWrite))
          using(XmlReader reader XmlReader.Create(stream))
          {
              Person model = serialize.Deserialize(reader) as Person;
          }
}

现在您已经成功地获得了要迭代的数据,因此您可以处理您的数据了。下面是一个示例:

// Iterates through each Person
foreach(var people in model.Person)
{
     var information = people.Cars.SelectMany(obj => new { obj.Mark, obj.model, obj.year, obj.hp }).ToList();
}

您将执行类似的操作,然后写入数据库。这并不完全符合您的示例,但应该为您指明一个强有力的方向。