我想将属性pro_id
和prod_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 ,因为我认为他和我有同样的问题,但问题依然存在。
是不是你尝试覆盖旧的XML,但由于新的人比你看到剩菜在原来的短流的结束? – Pawel 2014-09-29 06:38:53
@HouyNarun如何实现第二种方式? – har07 2014-09-29 06:49:09
@ har07从上面链接我跟着第二种方式是“在新打开的流中保存XML文档”。使用(var stream = storage.OpenFile(fileName,FileMode.Open,FileAccess.Write)) doc.Save(stream); '我试过两种方法,但仍然是同样的错误。 – 2014-09-29 07:04:10