silverlight IsolatedStorageFile 创建及操作xml
来源:互联网 发布:紧急域名网页升级访问 编辑:程序博客网 时间:2024/05/29 19:56
//记得添加xml xml.Linq的引用哦using System;using System.IO;using System.Net;using System.Windows;using System.Windows.Controls;using System.Windows.Documents;using System.Windows.Ink;using System.Windows.Input;using System.Windows.Media;using System.Windows.Media.Animation;using System.Windows.Shapes;using System.Collections.Generic;using System.IO.IsolatedStorage;using System.Xml;using System.Xml.Linq;namespace XmlMemoryDemo{ public class MemoryOper { private static string strXml = @"<?xml version=""1.0"" encoding=""utf-8""?> <projects> <name>value</name> </projects>"; /// <summary> /// 判断文件是否存在 /// </summary> private static bool existFille(string path) { using (var isoFile = IsolatedStorageFile.GetUserStoreForApplication()) { if (isoFile.FileExists(path)) { return true; } return false; } } /// <summary> /// 判断节点是否存在 /// </summary> private static bool exitsNode(string path, string name, string value) { List<MemoryNode> nodes = getNodes(path); MemoryNode node = new MemoryNode(name, path); if (nodes.Contains(node)) { return true; } return false; } /// <summary> /// 创建文件 /// </summary> /// <param name="path"></param> private static void createFile(string path) { if (!existFille(path)) { using (var isoFile = IsolatedStorageFile.GetUserStoreForApplication()) { using (var stream = new IsolatedStorageFileStream(path, FileMode.Create, isoFile)) { using (var writer = new StreamWriter(stream)) { writer.WriteLine(strXml); writer.Close(); } stream.Close(); } } } } /// <summary> /// 返回所有节点 /// </summary> private static List<MemoryNode> getNodes(string path) { createFile(path); using (var isoFile = IsolatedStorageFile.GetUserStoreForApplication()) { using (var stream = new IsolatedStorageFileStream(path, FileMode.Open, isoFile)) { XmlReader reader = XmlReader.Create(stream); XDocument xDoc = XDocument.Load(reader); XElement Root = xDoc.Root; List<MemoryNode> results = new List<MemoryNode>(); foreach (XElement ele in Root.Elements()) { MemoryNode result = new MemoryNode(ele.Name.ToString(), ele.Value.ToString()); results.Add(result); } stream.Close(); return results; } } } /// <summary> /// 通过名称获得value /// </summary> public static string getValue(string path, string name) { List<MemoryNode> nodes = getNodes(path); foreach(MemoryNode node in nodes) { if (node.name.Equals(name)) { return node.value; } } return ""; } /// <summary> /// 添加节点 /// </summary> public static void addNode(string path,string name, string value) { createFile(path); if (exitsNode(path,name,value)) { updateNode(path, name, value);//已经存在的节点更新即可 return; } using (var isoFile = IsolatedStorageFile.GetUserStoreForApplication()) { XDocument xdoc=null; using (IsolatedStorageFileStream isoStream = new IsolatedStorageFileStream(path, FileMode.Open, isoFile)) { XElement newElement = new XElement(name, value); xdoc=XDocument.Load(isoStream); xdoc.Root.Add(newElement); } using (IsolatedStorageFileStream isoStream = new IsolatedStorageFileStream(path, FileMode.Truncate, FileAccess.Write, isoFile)) { using (StreamWriter sw = new StreamWriter(isoStream, System.Text.Encoding.UTF8)) { xdoc.Save(sw); } } } } /// <summary> /// 更新节点 /// </summary> private static void updateNode(string path, string name, string value) { createFile(path); using (var isoFile = IsolatedStorageFile.GetUserStoreForApplication()) { XDocument xdoc = null; using (IsolatedStorageFileStream isoStream = new IsolatedStorageFileStream(path, FileMode.Open, isoFile)) { XElement newElement = new XElement(name, value); xdoc = XDocument.Load(isoStream); XElement root = xdoc.Root; foreach (XElement ele in root.Elements()) { if (ele.Name.ToString().Equals(name)) { ele.Remove(); } } xdoc.Root.Add(new XElement(name, value)); /* foreach (XElement ele in root.Elements()) { if (ele.Name.ToString().Equals(name)) { ele.Remove(); } } xdoc.Root.Add(new XElement(name, value)); */ /* foreach (XElement ele in root.Elements()) { if (ele.Name.ToString().Equals(name)) { ele.ReplaceWith(new XElement(name, value)); } } */ } using (IsolatedStorageFileStream isoStream = new IsolatedStorageFileStream(path, FileMode.Truncate, FileAccess.Write, isoFile)) { using (StreamWriter sw = new StreamWriter(isoStream, System.Text.Encoding.UTF8)) { xdoc.Save(sw); } } } } } /// <summary> /// 记录节点信息的类 重写了Equals方法 /// </summary> public class MemoryNode { public string name { set; get; } public string value { set; get; } public MemoryNode(string name, string value) { this.name = name; this.value = value; } public override bool Equals(Object node) { if (node == null) { return false; } MemoryNode newNode = (MemoryNode)node; if(this.name.Equals(newNode.name)) { return true; } return false; } }}