【问题标题】:Adding XmlAttribute to XmlAttributeCollection将 XmlAttribute 添加到 XmlAttributeCollection
【发布时间】:2015-05-23 04:10:47
【问题描述】:

我想创建一个 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);

但是现在每次我调用AddExtraAttributesxmlAttributeCollection 都有一些额外的属性,在我再次运行我的方法之前,我无法将其设置为 null (xmlAttributeCollection=null)。因为那样我就不能运行xmlAttributeCollection.append

那么我如何在重新添加属性之前重置xmlAttributeCollection

【问题讨论】:

    标签: c# xml xmlattributecollection


    【解决方案1】:

    我找到了解决方案here

    我不知道有没有更好的。

    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;
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-05-10
      • 2012-04-12
      • 2014-09-24
      • 1970-01-01
      相关资源
      最近更新 更多