private static void TraverseXmlNode(XmlNode rootNode, InfoHashTable infoHashTable) { if (rootNode == null) { return; } if (rootNode is XmlElement) { if (rootNode.HasChildNodes) { if (rootNode.FirstChild.NodeType == XmlNodeType.Text) { infoHashTable.Add(rootNode.Name, rootNode.FirstChild.Value); } else { infoHashTable.Add(rootNode.Name, null); TraverseXmlNode(rootNode.FirstChild, infoHashTable); infoHashTable.Add("End", null); } } if (rootNode.NextSibling != null) { TraverseXmlNode(rootNode.NextSibling, infoHashTable); } } }
public static void ModifyElementValue(String xmlName, InfoHashTable infoHashTable) { XmlDocument xmlDocument = new XmlDocument(); xmlDocument.Load(xmlName); XmlNode rootNode = xmlDocument.DocumentElement; XmlNode currentRootNode = null; XmlNode currentNode = null; foreach (SingleHashTable singleHashTable in infoHashTable) { if (singleHashTable.Value == null) { currentRootNode = rootNode.SelectSingleNode(singleHashTable.Key.ToString()); } else { if (currentRootNode != null && currentRootNode.HasChildNodes) { currentNode = currentRootNode.SelectSingleNode(singleHashTable.Key.ToString()); if (currentNode != null) { currentNode.InnerText = singleHashTable.Value.ToString(); } } } } xmlDocument.Save(xmlName); }
public void SaveAllDataBase() { String xmlName = dataBaseModel.FileName; xmlName = DefaultPath.DefaultPathEx.DataBasePath + xmlName; defaultDatas = dataBaseModel.DataBaseValues; InfoHashTable infoHashTable = GetDefaultInfoHashTable(); XmlHelper.CreateXml(infoHashTable, xmlName); }
protected InfoHashTable GetDefaultInfoHashTable()//获得默认的数据表 { InfoHashTable infoHashTable = new InfoHashTable(); infoHashTable.Add(dataBaseModel.RootElementName, null); for (int i = 0; i < defaultHeadNames.Length; i++) //1 { infoHashTable.Add(defaultHeadNames[i], defaultDatas[i]); } infoHashTable.Add("End", null); return(infoHashTable); }
public void SetDataBaseValue(PromptInfoModel promptInfoMode) { InfoHashTable infoHashTable = new InfoHashTable(); String[] promptNames = promptInfoMode.DefaultValues; if (!File.Exists(dataBaseName)) { infoHashTable.Add(rootElementName + "S", null); infoHashTable.Add("PromptInfoNumber", "1"); infoHashTable.Add(rootElementName + "1", null); for (int i = 0; i < headNames.Length; i++) { infoHashTable.Add(headNames[i], promptNames[i]); } infoHashTable.Add("End", null); infoHashTable.Add("End", null); XmlHelper.CreateXml(infoHashTable, dataBaseName); } else { int infoIndex = Convert.ToInt32(XmlHelper.GetElementValue(dataBaseName, "PromptInfoNumber")); bool appendElement = false; infoIndex++; if (infoIndex > maxLength) { infoIndex = 1; } else { appendElement = true; } XmlHelper.SetElementValue(dataBaseName, "PromptInfoNumber", infoIndex.ToString()); infoHashTable.Add(rootElementName + infoIndex.ToString(), null); for (int i = 0; i < headNames.Length; i++) { infoHashTable.Add(headNames[i], promptNames[i]); } infoHashTable.Add("End", null); if (appendElement) { XmlHelper.AppendElementValues(infoHashTable, dataBaseName); } else { XmlHelper.ModifyElementValue(dataBaseName, infoHashTable); } } }
/// <summary> /// 遍历整个Xml,将读取元素名和元素的值 /// </summary> /// <param name="xmlName"></param> /// <returns></returns> public static InfoHashTable ReadXmlValues(String xmlName) { InfoHashTable infoHashTable = new InfoHashTable(); if (File.Exists(xmlName)) { XmlDocument xmlDocument = new XmlDocument(); try { xmlDocument.Load(xmlName); XmlNode rootNode = xmlDocument.DocumentElement; TraverseXmlNode(rootNode, infoHashTable); xmlDocument.Save(xmlName); xmlDocument = null; } catch (Exception ex) { PromptOccurPlace promptOccurPlace = PromptOccurPlace.XmlReadError; PromptMessageType promptMessageType = PromptMessageType.Null; if (ex is XmlException) { promptMessageType = PromptMessageType.XmlException; } else if (ex is IOException) { promptMessageType = PromptMessageType.IOException; } else if (ex is NullReferenceException) { promptMessageType = PromptMessageType.NullReferenceException; } else if (ex is UnauthorizedAccessException) { promptMessageType = PromptMessageType.UnauthorizedAccessException; } else if (ex is StackOverflowException) { promptMessageType = PromptMessageType.StackOverflowException; } else { promptMessageType = PromptMessageType.UnKnown; } ErrorMessage.SetErrorMessage(promptOccurPlace, promptMessageType, Path.GetFileName(xmlName)); } } return(infoHashTable); }
private String[] CreateNewXml(String xmlName) { String backName = GetBackFileName(); String[] newXmlDatas = null; bool shouldCreatNewXml = true; if (backName != String.Empty) { backName = DefaultPath.DefaultPathEx.DataBasePath + backName; if (File.Exists(backName)) { File.Copy(backName, xmlName); shouldCreatNewXml = false; } } if (shouldCreatNewXml) { InfoHashTable infoHashTable = GetDefaultInfoHashTable(); XmlHelper.CreateXml(infoHashTable, xmlName); newXmlDatas = defaultDatas; } return(newXmlDatas); }
public PromptInfoModel[] ReadPromptInfos() { InfoHashTable infoHashTable = XmlHelper.ReadXmlValues(dataBaseName); List <PromptInfoModel> promptInfoModelList = new List <PromptInfoModel>(); PromptInfoModel promptInfoModel = null; String keyName = String.Empty; if (infoHashTable != null) { foreach (SingleHashTable singleHashTable in infoHashTable) { keyName = singleHashTable.Key.ToString(); if (keyName == (rootElementName + "S") || keyName == "PromptInfoNumber") { continue; } if (keyName.IndexOf(rootElementName) != -1) { promptInfoModel = new PromptInfoModel(); } else if (keyName.IndexOf("End") == -1) { PromptInfoEnum promptInfoEnum = (PromptInfoEnum)Enum.Parse(typeof(PromptInfoEnum), keyName, true); switch (promptInfoEnum) { case PromptInfoEnum.OccurTime: promptInfoModel.PromptTime = singleHashTable.Value.ToString(); break; case PromptInfoEnum.PromptData: promptInfoModel.PromptInfo = singleHashTable.Value.ToString(); break; case PromptInfoEnum.PromptID: promptInfoModel.PromptID = singleHashTable.Value.ToString(); break; case PromptInfoEnum.PromptName: promptInfoModel.PromptName = singleHashTable.Value.ToString(); break; case PromptInfoEnum.RunTime: promptInfoModel.RunTime = singleHashTable.Value.ToString(); break; case PromptInfoEnum.Version: promptInfoModel.CodeVersion = singleHashTable.Value.ToString(); break; default: break; } } else { if (promptInfoModel != null) { promptInfoModelList.Add(promptInfoModel); promptInfoModel = null; } } } } return(promptInfoModelList.ToArray()); }
public static void AppendElementValues(InfoHashTable hashTable, String xmlName) { XmlDocument xmlDocument = new XmlDocument(); try { xmlDocument.Load(xmlName); XmlNode rootNode = xmlDocument.DocumentElement; XmlNode appendNode = null; XmlElement appendElement = null; foreach (String key in hashTable.Keys) { if (hashTable[key] != null) { appendElement = xmlDocument.CreateElement(key); appendElement.InnerText = hashTable[key].ToString(); if (appendNode != null) { appendNode.AppendChild(appendElement); } } else { if (key != "End") { appendNode = xmlDocument.CreateElement(key); } else { rootNode.AppendChild(appendNode); } } } xmlDocument.Save(xmlName); } catch (Exception ex) { PromptOccurPlace promptOccurPlace = PromptOccurPlace.XmlWriteError; PromptMessageType promptMessageType = PromptMessageType.Null; if (ex is XmlException) { promptMessageType = PromptMessageType.XmlException; } else if (ex is IOException) { promptMessageType = PromptMessageType.IOException; } else if (ex is NullReferenceException) { promptMessageType = PromptMessageType.NullReferenceException; } else if (ex is UnauthorizedAccessException) { promptMessageType = PromptMessageType.UnauthorizedAccessException; } else { promptMessageType = PromptMessageType.UnKnown; } ErrorMessage.SetErrorMessage(promptOccurPlace, promptMessageType, Path.GetFileName(xmlName)); } }
/// <summary> /// 该函数用于读写只有一个父级,最简单的XML格式 /// </summary> /// <param name="xmlName"></param> /// <param name="elementNames"></param> /// <returns></returns> public static InfoHashTable ReadXmlValues(String xmlName, String[] elementNams) { InfoHashTable infoHashTable = null; if (File.Exists(xmlName)) { XmlDocument xmlDocument = new XmlDocument(); try { xmlDocument.Load(xmlName); XmlNode xmlRootNode = xmlDocument.DocumentElement; XmlNode xmlCurrentNode = null; infoHashTable = new InfoHashTable(); List <String> notFoundDataList = new List <string>(); for (int i = 0; i < elementNams.Length; i++) { xmlCurrentNode = xmlRootNode.SelectSingleNode(elementNams[i]); if (xmlCurrentNode != null) { infoHashTable.Add(elementNams[i], xmlCurrentNode.InnerText); } else { infoHashTable.Add(elementNams[i], "0"); notFoundDataList.Add(elementNams[i]); } } if (notFoundDataList.Count > 0) { for (int i = 0; i < notFoundDataList.Count; i++) { AppendElementValues(notFoundDataList[i], "0", xmlName); } } } catch (Exception ex) { PromptOccurPlace promptOccurPlace = PromptOccurPlace.XmlReadError; PromptMessageType promptMessageType = PromptMessageType.Null; if (ex is XmlException) { promptMessageType = PromptMessageType.XmlException; } else if (ex is IOException) { promptMessageType = PromptMessageType.IOException; } else if (ex is NullReferenceException) { promptMessageType = PromptMessageType.NullReferenceException; } else if (ex is UnauthorizedAccessException) { promptMessageType = PromptMessageType.UnauthorizedAccessException; } else { promptMessageType = PromptMessageType.UnKnown; } ErrorMessage.SetErrorMessage(promptOccurPlace, promptMessageType, Path.GetFileName(xmlName)); } finally { xmlDocument = null; } } return(infoHashTable); }
public static void CreateXml(InfoHashTable hashTable, String xmlName) { String directName = Path.GetDirectoryName(xmlName); if (!Directory.Exists(directName)) { Directory.CreateDirectory(directName); } XmlTextWriter xmlTextWriter = null; try { xmlTextWriter = new XmlTextWriter(xmlName, Encoding.UTF8); xmlTextWriter.Formatting = Formatting.Indented; xmlTextWriter.WriteStartDocument(); foreach (SingleHashTable singleHashTable in hashTable) { if (singleHashTable.Value != null) { xmlTextWriter.WriteElementString(singleHashTable.Key.ToString(), singleHashTable.Value.ToString()); } else { if (singleHashTable.Key.ToString() == "End") { xmlTextWriter.WriteEndElement(); } else { xmlTextWriter.WriteStartElement(singleHashTable.Key.ToString()); } } } xmlTextWriter.WriteEndDocument(); } catch (Exception ex) { PromptOccurPlace promptOccurPlace = PromptOccurPlace.XmlWriteError; PromptMessageType promptMessageType = PromptMessageType.Null; if (ex is IOException) { promptMessageType = PromptMessageType.IOException; } else if (ex is UnauthorizedAccessException) { promptMessageType = PromptMessageType.UnauthorizedAccessException; } else if (ex is NullReferenceException) { promptMessageType = PromptMessageType.NullReferenceException; } else if (ex is SecurityException) { promptMessageType = PromptMessageType.SecurityException; } else { promptMessageType = PromptMessageType.UnKnown; } ErrorMessage.SetErrorMessage(promptOccurPlace, promptMessageType, Path.GetFileName(xmlName)); } finally { if (xmlTextWriter != null) { xmlTextWriter.Flush(); xmlTextWriter.Close(); xmlTextWriter = null; } } }