Нет Коммерческий метод для создания XML-файла дает System.OutOfmemoryException Ошибка при использовании C # - PullRequest
0 голосов
/ 22 ноября 2018

Я использую метод Nopcommerce для создания возможной комбинации атрибутов продукта, и я получаю System.OutOfMemoryException. Пожалуйста, проверьте код ниже и предоставьте мне лучшее решение для этого:

public virtual string AddProductAttribute(string attributes, CustomProductVariantAttribute pva, string value)
{
    string result = string.Empty;
    try
    {
        var xmlDoc = new XmlDocument();
        if (String.IsNullOrEmpty(attributes))
        {
            var element1 = xmlDoc.CreateElement("Attributes");
            xmlDoc.AppendChild(element1);
        }
        else
        {
            xmlDoc.LoadXml(attributes);
        }
        var rootElement = (XmlElement)xmlDoc.SelectSingleNode(@"//Attributes");

        XmlElement pvaElement = null;
        //find existing
        var nodeList1 = xmlDoc.SelectNodes(@"//Attributes/ProductVariantAttribute");
        foreach (XmlNode node1 in nodeList1)
        {
            if (node1.Attributes != null && node1.Attributes["ID"] != null)
            {
                string str1 = node1.Attributes["ID"].InnerText.Trim();
                int id = 0;
                if (int.TryParse(str1, out id))
                {
                    if (id == pva.Id)
                    {
                        pvaElement = (XmlElement)node1;
                        break;
                    }
                }
            }
        }

        //create new one if not found
        if (pvaElement == null)
        {
            pvaElement = xmlDoc.CreateElement("ProductVariantAttribute");
            pvaElement.SetAttribute("ID", pva.Id.ToString());
            rootElement.AppendChild(pvaElement);
        }

        var pvavElement = xmlDoc.CreateElement("ProductVariantAttributeValue");
        pvaElement.AppendChild(pvavElement);

        var pvavVElement = xmlDoc.CreateElement("Value");
        pvavVElement.InnerText = value;
        pvavElement.AppendChild(pvavVElement);

        result = xmlDoc.OuterXml;
    }
    catch (Exception exc)
    {
        Debug.Write(exc.ToString());
    }
    return result;
}

Ожидание ответа.

...