Добавление 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);
Обновить
В качестве решения моей второй проблемы я использовал список XmlAttribute
s, чтобы я мог создавать новый экземпляр каждый раз, когда я вызываю метод. Теперь весь код выглядит так:
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;
}