2014-09-29 2 views
0

응용 프로그램 막대에서 불건전 메시지 아이콘을 누를 때마다 pro_idprod_xml을 비워 두겠습니다. 결국, 값은 공백으로 설정했다 그러나 그것은 또한이 같은 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> 

이것은 :

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(); 
      } 


     } 
    } 

} 
내가 전달 된 특정 ID에 대한 XML 파일에 데이터를 쓸 경우 속성이 prod_id 및 prod_xml, 나는이 될 데이터 싶은 한 후

이것은

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);     
       } 

    } 

(잘 작동)입니다 BLE

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); 
    } 
} 

는 I는 0 위치를 isoStream 설정하여 여기 updating an existing xml file in Windows Phone에서 질문과 동일 단계에 따라 (여기서 문제이다) UnwriteXML 패스 특정 ID() 메소드 다시 비어를 설정할 그가 나와 같은 문제가 있다고 생각하기 때문에 문제는 여전히 남아 있습니다.

+1

그것이되지 않는 문제를 해결합니다 스트림의 길이를 설정해야하지만 새로운 하나는 당신이에서 먹다 남은 음식을 볼 원래보다 짧은이기 때문에 시냇물 끝? – Pawel

+0

@HouyNarun 두 번째 방법을 구현하는 것은 어떻습니까? – har07

+0

@ har07 from link 위의 두 번째 방법은 "새로 열린 스트림에 XML 문서 저장"입니다. 'using (var stream = storage.OpenFile (fileName, FileMode.Open, FileAccess.Write)) { doc.Save (stream); }'두 가지 방법을 시도했지만 여전히 같은 오류가 발생했습니다. –

답변

0

당신이 당신이 이전 XML 덮어 쓰기를 시도하는

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

감사합니다. 어디에서 추가해야합니까? 또는 CreateFavXML(), WriteToXml() 및 UnWriteToXML()과 같은 xml 파일을 사용하는 모든 메서드에 추가 할 수 있습니까? –

+0

답을 주셔서 감사합니다.'XDocument.Load (stream)'뒤에 넣고 잘 작동합니다. –

+0

스트림 위치 (isoStreamx.Position = 0;)를 다시 설정해야합니다. – Mahender

관련 문제