2012-02-23 12 views
2

新しいxmlドキュメントが見つからない場合は作成した後、新しいxmlドキュメントを作成して新しいエントリを作成します。しかし、それはちょうど私が作成した後新しいXElementを追加すると、保存時にXMLファイル全体が既存のファイルに追加される

を作成し、空白ファイルの最後に完了した新しいXMLファイルを追加しているようだ:

<?xml version="1.0" encoding="utf-8" standalone="yes"?> 
<Devices /> 

を新しいXElementオブジェクトを追加した後:

<?xml version="1.0" encoding="utf-8" standalone="yes"?> 
<Devices /><?xml version="1.0" encoding="utf-8" standalone="yes"?> 
<Devices> 
    <device> 
    <name>blah</name> 
    <src00>True</src00> 
    </device> 
</Devices> 

私のコード.. 。私は同じ結果を持つ2つの異なる方法、両方を追加しようとしました

  // Create file if not found 
      if (!storage.FileExists("settings\\mydevices.xml")) 
      { 
       using (IsolatedStorageFileStream stream = storage.OpenFile("settings\\mydevices.xml", FileMode.Create, FileAccess.ReadWrite)) 
       { 
        XDocument devicesDoc = 
         new XDocument(
          new XDeclaration("1.0", "utf-8", "yes"), 
          new XElement("Devices") 
          ); 

        System.IO.StreamWriter file = new System.IO.StreamWriter(stream); 
        devicesDoc.Save(file); 
        file.Dispose(); 
       } 
      } 


      // Add new device 
      using (IsolatedStorageFileStream stream = storage.OpenFile("settings\\mydevices.xml", FileMode.Open, FileAccess.ReadWrite)) 
      { 

       XDocument mydevicesXml = XDocument.Load(stream); 
       //XElement item= new XElement("device", 
       //    new XElement("name",selectedDeviceName), 
       //    new XElement("src00","True") 
       //    ); 

       //mydevicesXml.Descendants("Devices").First().Add(item); 
       //mydevicesXml.Element("Devices").Add(item); 

       mydevicesXml.Root.Add(
        new XElement("device", 
         new XElement("name", selectedDeviceName), 
         new XElement("src00", "True"))); 


       System.IO.StreamWriter file = new System.IO.StreamWriter(stream); 
       mydevicesXml.Save(file); 
       file.Dispose(); 

答えて

6

試してください:

XElement root; 

if(File.Exists(file)) 
    root = XElement.Load(file); 
else 
    root = new XElement("Devices"); 

root.Add(new XElement("device", 
     new XElement("name", selectedDeviceName), 
     new XElement("src00", "True"))); 
root.Save(file); 
+0

ありがとうございました – Jason

関連する問題