2016-05-21 4 views
0

私はインターネットを見回しましたが、私は問題を解決できませんでしたが、これは非常にシンプルであるはずです。XMLファイルに属性と文字列を追加する#

私はXML文書を持っています。そこに見える二つのノード:各ノードに2つの要素を追加した後

<Attachments> 
    </Attachments> 

<Templates> 
    </Templates> 

が、それらは次のようになります。

<Attachments> 
     <Attachment INDEX0="Test1" /> 
     <Attachment INDEX1="Test2" /> 
     </Attachments> 

    <Templates> 
     <Template INDEX0="Test1">EMPTY</Template> 
     <Template INDEX0="Test2">EMPTY</Template> 
     </Templates> 

Iは最初のもののために、次のコードを試してみました:

XmlDocument doc = new XmlDocument(); 
     doc.Load(Path.Combine(Directory.GetCurrentDirectory(), "test.xml")); 
     XmlElement root = doc.DocumentElement; 
     XmlNode node = root.SelectSingleNode("//Attachments"); 

    List<String> list = new List<string>() {"Test1","Test2"}; 

    foreach(var item in list) 
    { 
     XmlElement elem = doc.CreateElement("Attachment"); 
     root.AppendChild(elem); 
     XmlNode subNode = root.SelectSingleNode("Attachment"); 
     XmlAttribute xKey = doc.CreateAttribute(string.Format("INDEX{0}", list.IndexOf(item).ToString())); 
     xKey.Value = item; 
     subNode.Attributes.Append(xKey); 
    } 

しかし、これは絶対に何もしません。この2つのケースをどのように達成できますか?

ありがとうございました!

答えて

1

特定の理由がない限り、LINQ to XMLを使用することをお勧めします。

var items = new List<string> {"Test1", "Test2"}; 

var attachments = items.Select((value, index) => 
    new XElement("Attachment", new XAttribute("INDEX" + index, value))); 

var doc = XDocument.Load(@"path/to/file.xml"); 

doc.Descendants("Attachments") 
    .Single() 
    .Add(attachments); 

が作動し、デモ用のthis fiddleを参照してください:古いXmlDocument APIはで動作するのは非常に痛いです。

+0

これは素晴らしいことです!どうもありがとうございました! – Canox

+0

1つの質問。どのようにして内部のテキストを入れますか?テンプレートノードのように? – Canox

+1

@Canox今、あなたの最善の行動は、LINQ to XMLのドキュメントとチュートリアルを見ていくことです。要素にテキストを追加するには、コンストラクタparamsにテキストを挿入します。既存の要素または属性のテキストを設定するには、その 'Value'プロパティを設定します。 –

0

申し訳ありませんが、エラーが見つかりました。 foreachループは次のようになります:

私はまだ私の例でテンプレート属性でケースを達成する方法がわかりません。

関連する問題