2012-05-05 10 views
1

私は、IsolatedStorage内のXMLファイルにElementを追加しようとしていますが、ルートに追加するのではなく、ファイルを複製して終了:ファイルの末尾にXML要素が追加されない理由

_xdoc = new XDocument(); 

using (var store = IsolatedStorageFile.GetUserStoreForApplication()) 
{ 
    using (IsolatedStorageFileStream isoStore = new IsolatedStorageFileStream("lampes.xml", FileMode.Open, store)) 
    { 
     _xdoc = XDocument.Load(isoStore); 
     int nextNumber = _xdoc.Element("root").Elements("lampe").Count() + 1; 

     XElement newChild = new XElement("lampe", "data" + nextNumber); 
     newChild.Add(new XAttribute("attr", nextNumber)); 
     _xdoc.Element("root").Add(newChild); 

     _xdoc.Save(isoStore); 
    } 
} 

私はここに欠けているもの:

<?xml version="1.0" encoding="utf-8"?> 
<root> 
    <lampe id="1" nom="lampe1" content="Tables" header="Lampes de la cuisine" adresse="A1" /> 
    <lampe id="2" nom="lampe2" content="Porte et garage" header="Lampe du jardin" adresse="C3" /> 
</root><?xml version="1.0" encoding="utf-8"?> 
<root> 
    <lampe id="1" nom="lampe1" content="Tables" header="Lampes de la cuisine" adresse="A1" /> 
    <lampe id="2" nom="lampe2" content="Porte et garage" header="Lampe du jardin" adresse="C3" /> 
    <child attr="1">data1</child> 
</root> 

これは私が使用しているコードはありますか?

答えて

1

同じファイルを読み書きすることはお勧めできません。あなたのXMLはです。が正しく設定されています。ちょうどと書かれています。が正しくありません。動作するはず

一つのアプローチは近く、(たとえば"lampe_tmp.xml")を別の場所にファイルを書き込むとIsolatedStorageFileDeleteFile APIを使用して、元の"lampe.xml"を削除し、MoveFile APIを使用して"lampe.xml""lampe_tmp.xml"をコピーすることです。

using (IsolatedStorageFileStream isoStore = new IsolatedStorageFileStream("lampes_tmp.xml", FileMode.Open, store)) { 
    // the code from your post that modifies XML goes here... 
} 
IsolatedStorageFile.DeleteFile("lampes.xml"); 
IsolatedStorageFile.MoveFile("lampes_tmp.xml", "lampes.xml"); 
+0

私はちょうどWP7で始まったので、私はいくつかのコードをお願いします。 –

+0

@Wassim確かに、ここには... – dasblinkenlight

+0

IsolatedStorageFileのRemove()メソッドがありません –

0

読んでいるのと同じストリームに書き込みます。ファイルの位置は、書き込みを開始するときにファイルの最後にあるため、ファイルに追加されます。

書き込みの前にストリームの位置をリセットするか、ストリームを閉じて書き込みのために新しいストリームを開きます。

+0

どうすればいいですか?私はWP7で始まっているので申し訳ありません –

+0

@Wassim:ストリームを一度開いたので、そのコードをコピーして、ファイルを書き込むコードを2番目の部分に移動します。 – Guffa