Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/322.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 将XML转换为类(反序列化),并将其保存到数据库中_C#_Xml_Deserialization_Xml Deserialization - Fatal编程技术网

C# 将XML转换为类(反序列化),并将其保存到数据库中

C# 将XML转换为类(反序列化),并将其保存到数据库中,c#,xml,deserialization,xml-deserialization,C#,Xml,Deserialization,Xml Deserialization,嗨,我有20多个xml文件链接。我搜索了很多把我的xml转换成c#,然后根据类对其进行反序列化,然后将其放入数据库,但没有找到一个很好的解决方案。请帮我怎么做 这是数据库的链接,下面是一些xml <urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9" xmlns:image="http://www.google.com/schemas/sitemap-image/1.1"> <url> <loc>

嗨,我有20多个xml文件链接。我搜索了很多把我的xml转换成c#,然后根据类对其进行反序列化,然后将其放入数据库,但没有找到一个很好的解决方案。请帮我怎么做

这是数据库的链接,下面是一些xml

<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9" xmlns:image="http://www.google.com/schemas/sitemap-image/1.1">
<url>
<loc>http://kithnyc.com/</loc>
<changefreq>daily</changefreq>
</url>
<url>
<loc>
http://kithnyc.com/products/adidas-originals-nmd-city-sock-black-blue
</loc>
<lastmod>2016-09-12T11:04:04-04:00</lastmod>
<changefreq>daily</changefreq>
<image:image>
<image:loc>...</image:loc>
<image:title>adidas Originals NMD City Sock - Black / Blue</image:title>
</image:image>
</url>
<url>
<loc>
http://kithnyc.com/products/kith-logo-mousepad-white
</loc>
<lastmod>2016-12-23T00:01:41-05:00</lastmod>
<changefreq>daily</changefreq>
<image:image>
<image:loc>
https://cdn.shopify.com/s/files/1/0094/2252/products/20150810-_MG_2963.jpg?v=1482353363
</image:loc>
<image:title>Kith Logo Mousepad - White</image:title>
</image:image>
</url>
</urlset>

http://kithnyc.com/
每日的
http://kithnyc.com/products/adidas-originals-nmd-city-sock-black-blue
2016-09-12T11:04:04-04:00
每日的
...
阿迪达斯原创NMD城市短袜-黑色/蓝色
http://kithnyc.com/products/kith-logo-mousepad-white
2016-12-23T00:01:41-05:00
每日的
https://cdn.shopify.com/s/files/1/0094/2252/products/20150810-_MG_2963.jpg?v=1482353363
Kith标志鼠标垫-白色

这是我想将其所有节点放入数据库的xml,如“Loc”、“lastmod”和“changefreq”等。请帮助我如何将其转换为类,然后如何对其进行反序列化。谢谢

您好,您可以这样做:

步骤1:按下面的行读取文件

XDocument xdoc = XDocument.Load(filebyte);
步骤2:通过子体方法获取xml的所有节点并将其转换为列表。 如果需要,请应用where子句来筛选该数据

var pNodelist = xdoc.Root.Descendants().ToList().Where(i => i.Name.LocalName == "p");
步骤3:创建数据表,并将列表中的所有数据存储在数据表中

DataTable dt = new DataTable();
dt.Columns.Add("StartTime");
dt.Columns.Add("EndTime");
dt.Columns.Add("Message");
foreach (var data in pNodelist)
{
if (data.HasAttributes == true)
dt.Rows.Add(data.FirstAttribute.Value, data.LastAttribute.Value, data.Value);
}

第4步:然后您可以将其保存到数据库中,避免第4步,直接将日期从列表存储到数据库中

您可以在代码中添加以下数据类和存储库类。您可以使用filepath调用存储库类并调用其FindAll方法。它返回Url列表

 public class Url
{
    public string Loc { get; set; }
    public string Changefreq { get; set; }
    public string Lastmod { get; set; }
    public Image Image { get; set; }

}
public class Image
{
    public string Loc { get; set; }
    public string Title { get; set; }
}
    public class Repository
{
    private XDocument xmlDatas;
    public Repository(string filePath)
    {
        xmlDatas = XDocument.Load(filePath);
    }
    public List<Url> FindAll()
    {
        return xmlDatas.Elements().Elements()
            .Select(url =>
            {
                Url data = new Url();
                foreach (var item in url.Elements())
                {
                    switch (item.Name.LocalName)
                    {
                        case "loc":
                            data.Loc = item.Value;
                            break;
                        case "changefreq":
                            data.Changefreq = item.Value;
                            break;
                        case "lastmod":
                            data.Lastmod = item.Value;
                            break;
                        case "image":
                            Image image = new Image();
                            foreach (var img in item.Elements())
                            {
                                switch (img.Name.LocalName)
                                {
                                    case "loc":
                                        image.Loc = img.Value;
                                        break;
                                    case "title":
                                        image.Title = image.Title;
                                        break;
                                }
                            }
                            data.Image = image;
                            break;
                    }
                    var s = item.Name.LocalName;
                }
                return data;
            }).ToList();
    }
}
公共类Url
{
公共字符串Loc{get;set;}
公共字符串Changefreq{get;set;}
公共字符串Lastmod{get;set;}
公共映像映像{get;set;}
}
公众阶级形象
{
公共字符串Loc{get;set;}
公共字符串标题{get;set;}
}
公共类存储库
{
私有xdocumentxmldatas;
公共存储库(字符串文件路径)
{
xmlDatas=XDocument.Load(文件路径);
}
公共列表FindAll()
{
返回xmlDatas.Elements().Elements()
.选择(url=>
{
Url数据=新Url();
foreach(url.Elements()中的变量项)
{
开关(item.Name.LocalName)
{
案例“loc”:
data.Loc=项目值;
打破
案例“changefreq”:
data.Changefreq=项目值;
打破
案例“lastmod”:
data.Lastmod=item.Value;
打破
案例“图像”:
图像=新图像();
foreach(item.Elements()中的var img)
{
开关(img.Name.LocalName)
{
案例“loc”:
image.Loc=img.Value;
打破
案例“标题”:
image.Title=image.Title;
打破
}
}
data.Image=Image;
打破
}
var s=item.Name.LocalName;
}
返回数据;
}).ToList();
}
}

了解如何将xml转换为类,然后使用常规序列化/反序列化从数据库中保存和检索为对象。此外,由于你编译成CS,这意味着你有具体的结构,你可以考虑为XML创建分离的表。Anurag,你能简要介绍一下什么是“p”吗?Arslan Ahmad p是我的Xml中的段落标记,因为我需要所有的ptags@ArslanAhmad您可以使用simple subjects()获取所有节点。我可以在xml文件中显示所有数据,但所有数据都是按行显示的,这意味着所有节点都在同一行上。我想分开它,像Loc,changefreq等,以及如何在数据表中显示数据。我是新来的,所以如果您能帮助根据它们的节点显示表将非常有帮助。我检查了它,Findall()函数没有返回任何东西。请检查存储库a=new Repository(“);列表s=a.Findall();我更改了存储库类。现在没事了。非常感谢Mehmet。你是天才。谢谢你的帮助。没问题。很高兴帮助某人。如果他是穆斯林,那就更好了