Appending new XElement adds an entire XML to exist

2019-08-26 14:29发布

I have an existing XML stored in the InternalFielStorage as..

<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<Root>
  <Books>
        <Author name="Sam" />
  </Books>
</Root>

I am trying to append a "title" node under the "Author" node but the when saved, I am seeing a completly new xml added to the existing xml as..

<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<Root>
    <Books>
        <Author name="Sam" />
    </Books>
</Root>
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<Root>  
    <Books>
        <Author name="Sam" />        
        <Title>Test</Title>
    </Books>
</Root>

Code I am using for this..

 using (IsolatedStorageFile myStore = IsolatedStorageFile.GetUserStoreForApplication())
  {
     using (IsolatedStorageFileStream myStream = new IsolatedStorageFileStream(App.FileName, FileMode.Open, FileAccess.ReadWrite, myStore))
     {
           XDocument _xDoc = XDocument.Load(myStream);
           XElement srcTree = new XElement("Title", "test");
           _xDoc.Element("Root").Element("Books").Add(new XElement(srcTree));
           _xDoc.Save(myStream);

QUESTIONS:
1. How can I avoid the new XML from being appended to the existing one?
2. How can I make the "title" tag to be under the <"Author name="Sam"> tag?

Thanks in advance.

1条回答
2楼-- · 2019-08-26 15:03

When you load the stream, the position is set to the last byte of the file - you need to reset the position before saving the file.

Do this with

myStream.Position = 0;
_xDoc.Save(myStream);

See the documentation here

查看更多
登录 后发表回答