2014-09-29 88 views
0

我想将属性pro_idprod_xml设置为空,只要我按下应用程序栏上的不正确图标即可。毕竟,值设置为空,但它也增加了一个根元素的XML文件是这样的:无法将值更新到Windows Phone 8中的XML文件

<?xml version="1.0" encoding="utf-8"?> 
<favorites> 
    <favorite id="1" pro_id="" prod_xml="" /> 
    <favorite id="2" pro_id="" prod_xml="" /> 
    <favorite id="3" pro_id="" prod_xml="" /> 
    <favorite id="4" pro_id="" prod_xml="" /> 
</favorites> /> 
</favorites> 

这是我如何创建一个从空白(无差错)的XML文件:

public void createFavXML() 
{ 
    // Get the local folder. 
    System.IO.IsolatedStorage.IsolatedStorageFile local = 
     System.IO.IsolatedStorage.IsolatedStorageFile.GetUserStoreForApplication(); 

    // Create a new folder named DataFolder. 
    if (!local.DirectoryExists("Favorite")) 
      local.CreateDirectory("Favorite"); 
//  local.DeleteFile("Favorite\\favorite.xml"); 
     if (!local.FileExists("Favorite\\favorite.xml")) 
     { 
      // Create a new file named DataFile.txt. 
      using (var isoFileStream = 
new System.IO.IsolatedStorage.IsolatedStorageFileStream("Favorite\\Favorite.xml", System.IO.FileMode.OpenOrCreate, local)) 
     { 

      XmlWriterSettings settings = new XmlWriterSettings(); 
      settings.Indent = true; 
      using (XmlWriter writer = XmlWriter.Create(isoFileStream, settings)) 
      { 
       writer.WriteStartElement("favorites", ""); 
       // favorite id 1 
       writer.WriteStartElement("favorite", ""); 
       // attribute id 
       writer.WriteStartAttribute("id", ""); 
       writer.WriteString("1"); 
       writer.WriteEndAttribute(); 
       // attribute product id 
       writer.WriteStartAttribute("pro_id", ""); 
       writer.WriteString(""); 
       writer.WriteEndAttribute(); 
       // attribute prod_xml 
       writer.WriteStartAttribute("prod_xml", ""); 
       writer.WriteString(""); 
       writer.WriteEndAttribute(); 
       writer.WriteEndElement(); 

       // favorite id 2 
       writer.WriteStartElement("favorite", ""); 
       // attribute id 
       writer.WriteStartAttribute("id", ""); 
       writer.WriteString("2"); 
       writer.WriteEndAttribute(); 
       // attribute product id 
       writer.WriteStartAttribute("pro_id", ""); 
       writer.WriteString(""); 
       writer.WriteEndAttribute(); 
       // attribute prod_xml 
       writer.WriteStartAttribute("prod_xml", ""); 
       writer.WriteString(""); 
       writer.WriteEndAttribute(); 
       writer.WriteEndElement(); 

       // favorite id 3 
       writer.WriteStartElement("favorite", ""); 
       // attribute id 
       writer.WriteStartAttribute("id", ""); 
       writer.WriteString("3"); 
       writer.WriteEndAttribute(); 
       // attribute product id 
       writer.WriteStartAttribute("pro_id", ""); 
       writer.WriteString(""); 
       writer.WriteEndAttribute(); 
       // attribute prod_xml 
       writer.WriteStartAttribute("prod_xml", ""); 
       writer.WriteString(""); 
       writer.WriteEndAttribute(); 
       writer.WriteEndElement(); 

       // favorite id 4 
       writer.WriteStartElement("favorite", ""); 
       // attribute id 
       writer.WriteStartAttribute("id", ""); 
       writer.WriteString("4"); 
       writer.WriteEndAttribute(); 
       // attribute product id 
       writer.WriteStartAttribute("pro_id", ""); 
       writer.WriteString(""); 
       writer.WriteEndAttribute(); 
       // attribute prod_xml 
       writer.WriteStartAttribute("prod_xml", ""); 
       writer.WriteString(""); 
       writer.WriteEndAttribute(); 
       writer.WriteEndElement(); 



       // Ends the document 
       writer.WriteEndElement(); 

       writer.Flush(); 
      } 


     } 
    } 

} 

这是我写数据到XML文件传递给它的特定ID(工作正常)

public void writeTOFavxml(string favId,string pro_id,string prod_xml) 
    { 

     var storage = IsolatedStorageFile.GetUserStoreForApplication(); 
     fileName = "Favorite\\Favorite.xml"; 
     using (IsolatedStorageFileStream isoStream = new IsolatedStorageFileStream(fileName, FileMode.Open, storage)) 
     { 

        XDocument doc = XDocument.Load(isoStream); 
        foreach (var item in (from item in doc.Descendants("favorite") 
            where item.Attribute("id").Value.Equals(favId) 
            select item).ToList()) 
        { 

         item.Attribute("pro_id").SetValue(pro_id); 
         item.Attribute("prod_xml").SetValue(prod_xml); 

        }     
        //First way 
        isoStream.Position = 0; 
        doc.Save(isoStream);     
       } 

    } 

后的属性PROD_ID和prod_xml有数据,我想成为一个BLE再次设定为空对于传递给UnwriteXML的特定ID()方法(问题是在这里)

public void UnwriteXML(string pro_id) 
{ 
    var storage = IsolatedStorageFile.GetUserStoreForApplication(); 
    fileName = "Favorite\\Favorite.xml"; 
    XDocument docx = null; 
    using (IsolatedStorageFileStream isoStreamx = new IsolatedStorageFileStream(fileName, FileMode.Open, storage)) 
    { 
     docx = XDocument.Load(isoStreamx); 
     foreach (var item in (from item in docx.Descendants("favorite") 
             where item.Attribute("pro_id").Value.Equals(pro_id) 
             select item).ToList()) 
     { 
      item.Attribute("pro_id").SetValue(""); 
      item.Attribute("prod_xml").SetValue(""); 
     } 

     //First way 
     isoStreamx.Position = 0; 
     docx.Save(isoStreamx); 
    } 
} 

我是严格遵循相同的步骤,在从这里updating an existing xml file in Windows Phone问题通过设置isoStream到位置0 ,因为我认为他和我有同样的问题,但问题依然存在。

+1

是不是你尝试覆盖旧的XML,但由于新的人比你看到剩菜在原来的短流的结束? – Pawel 2014-09-29 06:38:53

+0

@HouyNarun如何实现第二种方式? – har07 2014-09-29 06:49:09

+0

@ har07从上面链接我跟着第二种方式是“在新打开的流中保存XML文档”。使用(var stream = storage.OpenFile(fileName,FileMode.Open,FileAccess.Write)) doc.Save(stream); '我试过两种方法,但仍然是同样的错误。 – 2014-09-29 07:04:10

回答

0

你应该设置你的流长度,这将解决这个问题

stream.SetLength(xdoc.ToString().Length); 
+0

谢谢我应该在哪里添加它?或将其添加到每个使用xml文件的方法,如CreateFavXML(),WriteToXml()和UnWriteToXML()? – 2014-09-30 04:49:17

+0

谢谢你的回答,我把它放在'XDocument.Load(stream)'之后,它工作正常:) – 2014-09-30 05:10:56

+0

你应该在重置流位置之后放置它(isoStreamx.Position = 0;) – Mahender 2014-10-01 03:05:40

相关问题