如何在 c# asp.net mvc 3 中反序列化未知的大型 xml 文件
本文关键字:未知 反序列化 大型 文件 xml asp mvc net | 更新日期: 2023-09-27 17:56:07
我几乎 asp.net mvc 3应用程序编写了一个"网上商店",我想用一个网上商店的一些项目填充我的数据库。它们在 xml 文件中为其合作伙伴提供有关项的信息。我已经下载了一个,但它是 150 MB,所以我不能只是打开它并查看内容。
文件中的信息也不会完全匹配我的模型,所以我需要以某种方式"合并"东西。我该怎么做?也许您知道一些关于如何下载xml并对其进行反序列化的精彩教程?
LINQ to XML 是一个了不起的提供程序。它将允许您以 XElements 的形式查询您的 XML 文档。
using System.Xml.Linq;
如果可以通过它们提供的任何 uri 下载代码中的 xml,则可以通过 System.IO.File 将其加载到内存中,并使用 LINQ to XML 对其进行操作。
string xml = new WebClient().DownloadString(url);
XDocument doc = XDocument.Parse(xml);
//item being the name of the node
var itemDescendent = doc.Descendants("item");
var query = from item in itemDescendent
select new
{
itemId = item.Attribute("id"),
itemName = item.Attribute("Name")
};
foreach (item in query)
{
//dostuff
}
这将从节点中选择属性,您需要一种略有不同的方法来获取节点内的节点。
使用这个或这个
using System;
using System.IO;
using System.Xml.Serialization;
namespace xmlTest
{
class Program
{
static void Main(string[] args)
{
var articles = new Articles();
articles.ArticleArray = new ArticlesArticle[2]
{
new ArticlesArticle()
{
Guid = Guid.NewGuid(),
Order = 1,
Type = "deal_abstract",
Title = "Abu Dhabi...",
Summary = "Abu Dhabi...",
ArticleDate = new DateTime(2011,2,24)
},
new ArticlesArticle()
{
Guid = Guid.NewGuid(),
Order = 2,
Type = "deal_abstract",
Title = "Abu Dhabi...",
Summary = "China...",
ArticleDate = new DateTime(2011,2,23)
},
};
var sw = new StringWriter();
var xmlSer = new XmlSerializer(typeof (Articles));
var noNamespaces = new XmlSerializerNamespaces();
noNamespaces.Add("", "");
xmlSer.Serialize(sw, articles,noNamespaces);
Console.WriteLine(sw.ToString());
}
}
[XmlRoot(ElementName = "articles", Namespace = "", IsNullable = false)]
public class Articles
{
[XmlElement("article")]
public ArticlesArticle[] ArticleArray { get; set; }
}
public class ArticlesArticle
{
[XmlElement("guid")]
public Guid Guid { get; set; }
[XmlElement("order")]
public int Order { get; set; }
[XmlElement("type")]
public string Type { get; set; }
[XmlElement("textType")]
public string TextType { get; set; }
[XmlElement("id")]
public int Id { get; set; }
[XmlElement("title")]
public string Title { get; set; }
[XmlElement("summary")]
public string Summary { get; set; }
[XmlElement("readmore")]
public string Readmore { get; set; }
[XmlElement("fileName")]
public string FileName { get; set; }
[XmlElement("articleDate")]
public DateTime ArticleDate { get; set; }
[XmlElement("articleDateType")]
public string ArticleDateType { get; set; }
}
}