Добавление XmlAttribute в XmlAttributeCollection

Я хочу создать XmlAttributeCollection и добавить некоторые атрибуты в зависимости от условий. Это то, что я пробовал.

XmlElement fishElement = doc.CreateElement(string.Empty, "fi", string.Empty);
XmlAttributeCollection attCollection = AddExtraAttributes(doc,condition);
foreach (XmlAttribute attribute in attCollection)
   {
      fishElement.Attributes.Append((XmlAttribute)attribute.Clone());
   }

private XmlAttributeCollection AddExtraAttributes(XmlDocument doc,bool condition)
{
    XmlAttributeCollection xmlAttributeCollection;
    if(condition)
     {
        XmlAttribute attribute = doc.CreateAttribute("A");
        attribute.Value = "value1";
        xmlAttributeCollection.Append(attribute);
     }
    else
     {
        XmlAttribute attribute = doc.CreateAttribute("B");
        attribute.Value = "value2";
        xmlAttributeCollection.Append(attribute);
     }
   return xmlAttributeCollection;
}

Но, таким образом, я сталкиваюсь с этой ошибкой:

xmlAttributeCollection может не инициализироваться перед доступом

И если я попытаюсь сделать это:

XmlAttributeCollection xmlAttributeCollection = new XmlAttributeCollection;

Это говорит:

Не удается получить доступ к внутреннему конструктору 'XmlAttributeCollection' здесь

Так как я могу сделать это работает?

Обновить

Итак, я решил проблему таким образом

XmlAttribute newAttr = doc.CreateAttribute("genre");
newAttr.Value = "novel";
XmlAttributeCollection attrColl = doc.DocumentElement.Attributes;
attrColl.Append(newAttr);

Но теперь каждый раз, когда я звоню AddExtraAttributes, xmlAttributeCollection имеет некоторые дополнительные атрибуты, и я не могу установить его на ноль (xmlAttributeCollection=null), прежде чем снова запустить мой метод. потому что тогда я не могу бежать xmlAttributeCollection.append,

Так как я могу сбросить xmlAttributeCollection перед добавлением атрибутов к нему снова?

1 ответ

Решение

Я нашел решение здесь

Я не знаю, есть ли лучший.

XmlDocument doc = new XmlDocument();
doc.LoadXml("<book ISBN='1-861001-57-5'>" +
            "<title>Pride And Prejudice</title>" +
            "</book>");      

//Create a new attribute.
XmlAttribute newAttr = doc.CreateAttribute("genre");
newAttr.Value = "novel";

//Create an attribute collection and add the new attribute 
//to the collection.
XmlAttributeCollection attrColl = doc.DocumentElement.Attributes;
attrColl.Append(newAttr);

Обновить

В качестве решения моей второй проблемы я использовал список XmlAttributes, чтобы я мог создавать новый экземпляр каждый раз, когда я вызываю метод. Теперь весь код выглядит так:

XmlElement fishElement = doc.CreateElement(string.Empty, "fi", string.Empty);
IEnumerable<XmlAttribute> attCollection = AddExtraAttributes(doc,condition);
foreach (XmlAttribute attribute in attCollection)
   {
      fishElement.Attributes.Append(attribute);
   }

private IEnumerable<XmlAttribute> AddExtraAttributes(XmlDocument doc,bool condition)
{
    List<XmlAttribute> xmlAttributeCollection = new List<XmlAttribute>();
    if(condition)
     {
        XmlAttribute attribute = doc.CreateAttribute("A");
        attribute.Value = "value1";
        xmlAttributeCollection.Add(attribute);
     }
    else
     {
        XmlAttribute attribute = doc.CreateAttribute("B");
        attribute.Value = "value2";
        xmlAttributeCollection.Add(attribute);
     }
   return xmlAttributeCollection;
}
Другие вопросы по тегам