/********************************************************************************************* * Copyright 2004 - Volian Enterprises, Inc. All rights reserved. * Volian Enterprises - Proprietary Information - DO NOT COPY OR DISTRIBUTE * ------------------------------------------------------------------------------ * $Workfile: PrivateProfile.cs $ $Revision: 1 $ * $Author: Kathy $ $Date: 7/27/04 8:34a $ * * $History: PrivateProfile.cs $ * * ***************** Version 1 ***************** * User: Kathy Date: 7/27/04 Time: 8:34a * Created in $/LibSource/Utils *********************************************************************************************/ using System; using System.IO; using System.Xml; namespace Utils { /// /// PrivateProfile opens a private profile string and stores it's contents in an xml document. /// public class PrivateProfile { private string ppName; private XmlDocument ppXml; private XmlNode AddNode(XmlNode xParent, string sName, string sValue ) { XmlNode nd; // Add a node nd=xParent.OwnerDocument.CreateNode(System.Xml.XmlNodeType.Element,sName,""); xParent.AppendChild(nd); nd.Value=sValue; return nd; } private XmlNode AddNode(XmlNode xParent, string sName) { XmlNode nd; // Add a node nd=xParent.OwnerDocument.CreateNode(System.Xml.XmlNodeType.Element,sName,""); xParent.AppendChild(nd); return nd; } private void AddAttribute(XmlNode xParent, string sName, string sValue ) { XmlNode xa=xParent.Attributes.GetNamedItem(sName); // bug fix. 09/15/03 // If there was a space after an equal sign, that space character // was becomming part of the value string (reading the user.CFG file). // This was giving us a "Must have semi-colon" error message. // We now strip spaces before and after any Attribute that is written. sValue = sValue.Trim(' '); // Add an attribute if(sValue=="") { if(xa != null) { xParent.Attributes.RemoveNamedItem(sName); } } else { if(xa == null) { xa = xParent.OwnerDocument.CreateNode(System.Xml.XmlNodeType.Attribute ,sName,""); xParent.Attributes.SetNamedItem(xa); } xa.Value=sValue; } } private XmlNode AddSection(XmlNode xParent, string sSection ) { // Add a section [name] XmlNode nd =AddNode(xParent,"section"); AddAttribute(nd,"name",sSection.Substring(1,sSection.IndexOf("]")-1)); return nd; } private XmlNode AddSection_UC(XmlNode xParent, string sSection ) { // Add a section [name] string name_uc = sSection.Substring(1,sSection.IndexOf("]")-1).ToUpper() + "__UC"; XmlNode nd =AddNode(xParent,"sectionUC"); AddAttribute(nd,"name",name_uc); return nd; } private void AddComment(XmlNode xParent, string sComment) { if(xParent.ChildNodes.Count > 0) { XmlNode ndlast=xParent.ChildNodes.Item(xParent.ChildNodes.Count-1); if(ndlast.Name=="comment") { XmlNode xa = ndlast.Attributes.GetNamedItem("text"); xa.Value=xa.Value + "\r\n" + sComment; return; } } // Add a comment text XmlNode nd =AddNode(xParent,"comment"); AddAttribute(nd,"text",sComment); } private void AddLine(XmlNode xParent, string sLine) { // Add a comment text XmlNode nd =AddNode(xParent,"line"); AddAttribute(nd,"text",sLine); } private void AddParam(XmlNode xParent, string sParam) { int i = sParam.IndexOf("="); // add a param name=value string sName=sParam.Substring(0,i); string sValue=sParam.Substring(i+1); XmlNode nd =AddNode(xParent,"param"); sName = sName.Trim(' '); AddAttribute(nd,"name",sName); AddAttribute(nd,"value",sValue); // AddAttribute(nd,"srchname",sName.ToUpper()+"__UC"); // AddAttribute(nd,"value",sValue); } private void AddParam_UC(XmlNode xParent, string sParam) { int i = sParam.IndexOf("="); // add a param name=value string sName=sParam.Substring(0,i); string sValue=sParam.Substring(i+1); XmlNode nd =AddNode(xParent,"paramUC"); sName = sName.Trim(' '); AddAttribute(nd,"name",sName.ToUpper()+"__UC"); AddAttribute(nd,"value",sValue); } private void LoadXML() { string sLine; ppXml.LoadXml("");// initialize ppXml XmlNode xmlTop=ppXml.DocumentElement; XmlNode xmlNd=ppXml.DocumentElement; XmlNode xmlNd_UC=ppXml.DocumentElement; StreamReader myReader = new StreamReader(ppName);// Open file while( (sLine = myReader.ReadLine())!= null)// read line-by-line { // add structure if(sLine.Length > 0) { switch (sLine.Substring(0,1)) { case "[": xmlNd=AddSection(xmlTop, sLine); xmlNd_UC=AddSection_UC(xmlTop, sLine); break; case ";": AddComment(xmlNd, sLine); break; default: if(sLine.IndexOf("=") >= 0) { AddParam(xmlNd, sLine); AddParam_UC(xmlNd_UC, sLine); } else { AddLine(xmlNd, sLine); } break; } } } myReader.Close(); // close file } public PrivateProfile(string sFileName) { ppName=sFileName; // Store file name ppXml= new XmlDocument();// Allocate XML LoadXML();// Load XML } ~PrivateProfile() { // Clean-up // } public string PrettyNode(XmlNode nd,int level) { string retval=""; string prefix=new string(' ',level*2); if(nd.ChildNodes.Count > 0) { retval = prefix + "<" + nd.Name; for(int i=0;i"; for(int i=0;i"; } else { retval = prefix + "<" + nd.Name; for(int i=0;i"; } return retval; } public string PrettyXML() { return PrettyNode(ppXml.DocumentElement,0); } public XmlDocument XML() { // return XML Document return ppXml; } public override string ToString() { // return string return ""; } public void Save() { SaveAs(ppName); } public void SaveAs(string sName) { } public string Attr(string sPath) { string retval=""; XmlNode xn = ppXml.SelectSingleNode(sPath); if(xn != null) { string quots = xn.Value; if (quots.Substring(0,1)=="\"" && quots.Substring(quots.Length-1,1)=="\"") retval = quots.Substring(1,quots.Length-2); else retval=xn.Value; } return retval; } public string Attr(string sSection, string sParameter) { string findstr = "/ini/sectionUC[@name='" + sSection.ToUpper() + "__UC']/paramUC[@name='" + sParameter.ToUpper() + "__UC']/@value"; return Attr(findstr); } } }