Adding XmlAttribute to XmlAttributeCollection
本文关键字:XmlAttributeCollection to XmlAttribute Adding | 更新日期: 2023-09-27 17:50:26
我想创建一个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
有一些额外的属性,在我再次运行我的方法之前,我不能将其设置为null (xmlAttributeCollection=null
)。因为那样我就不能运行xmlAttributeCollection.append
了。
那么我怎么能重置xmlAttributeCollection
之前添加属性到它再次?
我找到了一个解决方案
我不知道有没有更好的。
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;
}