응용 프로그램 막대에서 불건전 메시지 아이콘을 누를 때마다 pro_id
및 prod_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() 메소드 다시 비어를 설정할 그가 나와 같은 문제가 있다고 생각하기 때문에 문제는 여전히 남아 있습니다.
그것이되지 않는 문제를 해결합니다 스트림의 길이를 설정해야하지만 새로운 하나는 당신이에서 먹다 남은 음식을 볼 원래보다 짧은이기 때문에 시냇물 끝? – Pawel
@HouyNarun 두 번째 방법을 구현하는 것은 어떻습니까? – har07
@ har07 from link 위의 두 번째 방법은 "새로 열린 스트림에 XML 문서 저장"입니다. 'using (var stream = storage.OpenFile (fileName, FileMode.Open, FileAccess.Write)) { doc.Save (stream); }'두 가지 방법을 시도했지만 여전히 같은 오류가 발생했습니다. –