0

我想创建一个 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添加属性之前重置呢?

4

1 回答 1

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;
}
于 2015-05-23T04:10:47.063 回答