gpt4 book ai didi

c# - 创建没有 for 循环的 XmlDocument

转载 作者:行者123 更新时间:2023-11-30 22:10:09 24 4
gpt4 key购买 nike

您好,我正在使用产品数据创建 XmlDocument。我的代码

foreach (var pv in pvs)
{
XmlElement product = xml.CreateElement("Product");
product.SetAttribute("SKU", pv.Sku);
root.AppendChild(product);

var pname = xml.CreateElement("Name");
pname.InnerText = pv.Product.Name;

product.AppendChild(pname);

var MRP = xml.CreateElement("Mrp");

MRP.InnerText = Math.Round(pv.OldPrice, 2).ToString();

var SKU_MRP = _barcodeService.GetMRPsBySku(pv.Sku);

var mrps = SKU_MRP.AsEnumerable().Select(s => s.MRP).ToList();

if (mrps.Count > 0)
{
mrpstring = string.Join<string>(",", mrps.Select(x => Math.Round(x, 2).ToString()).Where(x => x != Math.Round(pv.OldPrice, 2).ToString()).ToList());
}

if (!string.IsNullOrEmpty(mrpstring))
{
MRP.InnerText += "," + mrpstring;
}
product.AppendChild(MRP);
}

xml.Save(path);

我粘贴的以上代码只是我整个功能的一部分。请注意,我正在从返回 IList 的 barcodeservice 函数中调用方法。

我的 pv 计数超过 5000。因此生成完整文件需要 5-7 分钟。现在有什么解决方法可以最大程度地减少负载,或者我如何在不使用 foreach 的情况下生成相同的文件。

任何解决方案?

最佳答案

如果你需要生成大的xml文件,那么使用XmlWriter而不是 XmlDocumentXmlDocument 在将其保存到文件之前构建内存中的 xml 表示。 XmlWriter 将数据直接写入文件。

使用 XmlWriter,您的循环将如下所示:

using(XmlWriter writer = XmlWriter.Create(fileName))
{
writer.WriteStartDocument();
writer.WriteStartElement("Products");

foreach (var pv in pvs)
{
writer.WriteStartElement("Product");
writer.WriteAttributeString("SKU", pv.Sku);
writer.WriteElementString("Name", pv.Product.Name);
// ...
writer.WriteEndElement();
}

writer.WriteEndElement();
writer.WriteEndDocument();
}

您还可以优化 mrpstring 创建(如果价格存储为十进制值):

decimal oldPrice = Math.Round(pv.OldPrice, 2);
var SKU_MRP = _barcodeService.GetMRPsBySku(pv.Sku);
var newPrices = SKU_MRP.AsEnumerable()
.Select(s => Math.Round(s.MRP, 2))
.Where(mrp => mrp != oldPrice);

mrpstring = String.Join(",", newPrices);

因此你只需要枚举新的价格,然后你不需要将它们保存到列表中,也不需要检查计数,因为如果没有任何东西可以加入,加入将返回空字符串。此外,如果您使用 decimals 作为价格,请避免将它们转换为字符串,或者考虑仅在 mrpstring 创建期间进行舍入。

关于c# - 创建没有 for 循环的 XmlDocument,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21061098/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com