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

しかし、 を呼び出すたびにAddExtraAttributesxmlAttributeCollectionいくつかの追加の属性がありxmlAttributeCollection=null、メソッドを再度実行する前にそれを 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);

アップデート

2 番目の問題の解決策として、 s のリストを使用してXmlAttribute、メソッドを呼び出すたびに新しいインスタンスを作成できるようにしました。コード全体は次のようになります。

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 に答える