繁体   English   中英

C#将XML解析为对象并存储到数据库中

[英]C# Parse XML to Object and store into Database

我目前正在使用SQL Server 2014作为数据存储的ASP.NET MVC 4.6应用程序上进行工作。

我需要从URL解析XML文档,将XML转换为对象,然后使用Entity Framework 6将其存储到数据库中。

我需要从这样的URL解析XML:

http://api.myserver.com/notes.xml

我的XML如下所示:

<?xml version="1.0" encoding="UTF-8"?>
<notes>
    <note>
      <to>Tove</to>
      <from>Jane</from>
      <heading>Reminder</heading>
      <body>Don't forget me this weekend!</body>
    </note>
    <note>
      <to>Doe</to>
      <from>John</from>
      <heading>Meeting</heading>
      <body>Hello Monday!</body>
    </note>
<notes>

我的模型课程笔记如下所示:

public class Note
{
    public string To { get; set; }
    public string From { get; set; }
    public string Heading { get; set; }
    public string Body { get; set; }
}

我当前的测试实现看起来像这样,但是我对XML的解析并不满意:

namespace ConsoleApp1
{
    class Program
    {
        static void Main(string[] args)
        {
            String url = "https://www.w3schools.com/xml/note.xml";
            XmlDocument doc = new XmlDocument();
            doc.Load(url);
            XmlElement root = doc.DocumentElement;

            StringBuilder sb = new StringBuilder();
            sb.Append("<note>");

            foreach (XmlNode item in root)
            {
                sb.Append(item.OuterXml);
            }
            sb.Append("</note>");

            var result = Deserialize<Note>(sb.ToString());

            // further processing of result using EF 6

            Console.ReadKey();
        }


        public static T Deserialize<T>(string xmlText)
        {
            try
            {
                var stringReader = new StringReader(xmlText);
                var serializer = new XmlSerializer(typeof(T));
                return (T)serializer.Deserialize(stringReader);
            }
            catch (Exception ex)
            {
                throw;
            }
        }
    }

    [XmlRoot(ElementName = "note", Namespace = "")]
    public class Note
    {
        [XmlElement("to")]
        public string To { get; set; }
        [XmlElement("from")]
        public string From { get; set; }
        [XmlElement("heading")]
        public string Heading { get; set; }
        [XmlElement("body")]
        public string Body { get; set; }
    }

}

据我所知,.NET提供了几种有关如何解析XML的方法:

  • XmlReader类
  • XPath
  • XDocument
  • 数据集
  • LINQ

我想知道,您将使用什么?您将如何解决使用.NET从URL解析XML文档并将其转换为对象以将其存储在SQL Server DB中的问题?

感谢您的帮助和考虑!!

这可能对您有帮助,您可以使用序列化方法和反序列化方法。

public static string Serialize<T>(T dataToSerialize)
{
    try
    {
        var stringwriter = new ISOEncodingStringWriter();
        var serializer = new XmlSerializer(typeof(T));

        var xns = new XmlSerializerNamespaces();
        xns.Add(string.Empty, string.Empty);

        serializer.Serialize(stringwriter, dataToSerialize, xns);
        return stringwriter.ToString();
    }
    catch
    {
        throw;
    }
}

public static T Deserialize<T>(string xmlText)
{
    try
    {
        var stringReader = new System.IO.StringReader(xmlText);
        var serializer = new XmlSerializer(typeof(T));
        return (T)serializer.Deserialize(stringReader);
    }
    catch
    {
        throw;
    }
}

您可以使用以下方法:

 Note result = Deserialize<Note>(xmlstring);

 Note note = new Note(){...};
 string convertedToXML = Serialize<Note>(note);

只需记住,您需要向笔记类中添加一些数据,以便它实际上可以序列化数据:

[XmlRoot(ElementName = "root", Namespace = "")]
public class Note
{
    [XmlElementAttribute("To")]
    public string To { get; set; }

    [XmlElementAttribute("From")]
    public string From { get; set; }

    [XmlElementAttribute("Heading")]
    public string Heading { get; set; }

    [XmlElementAttribute("Body")]
    public string Body { get; set; }
}

希望对您有所帮助:)

您可以使用LINQ to XML遍历文档的节点,并使用EF或ADO.NET将其存储在数据库中。 您可以从这个有用的教程开始: http : //www.c-sharpcorner.com/UploadFile/de41d6/learning-linq-made-easy-tutorial-1/

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM