C# - 从XML到数据库

时间:2014-08-20 14:21:19

标签: c# xml

我有一个XML文件,它可以有多个节点,子节点,“子子节点”,......我想弄清楚如何获取这些数据以便将它们存储到我自己的SQL Server数据库中

我在互联网上阅读了一些tutos,并尝试了一些东西。目前,我可以打开并读取文件,但不能检索数据。以下是我正在做的事情:

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>

任何建议或tuto做那些家伙?

2 个答案:

答案 0 :(得分:0)

我使用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节点的值

答案 1 :(得分:0)

好吧,前几天经历了类似的事情。您应该尝试以下方法,最初构建一个模型:

  1. 打开XML文档。
  2. 复制整个 XML文档。
  3. 打开Visual Studio。
  4. 点击初始课程区域(1b图)
  5. 转到Visual Studio中的“编辑”
  6. 选择性粘贴 - 粘贴为XML类
  7. 1B:

     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();
    }
    

    你会做那样的事情,然后写入数据库。这完全不符合您的榜样,但应该指明您的方向。