257 lines
		
	
	
		
			6.9 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
			
		
		
	
	
			257 lines
		
	
	
		
			6.9 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
| /*********************************************************************************************
 | |
|  * 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
 | |
| {
 | |
| 	/// <summary>
 | |
| 	/// PrivateProfile opens a private profile string and stores it's contents in an xml document.
 | |
| 	/// </summary>
 | |
| 	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("<ini/>");// 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<nd.Attributes.Count;i++)
 | |
| 				{
 | |
| 					retval=retval + " " + nd.Attributes.Item(i).Name + "='" + nd.Attributes.Item(i).Value + "'";
 | |
| 				}
 | |
| 				retval=retval+">";
 | |
| 				for(int i=0;i<nd.ChildNodes.Count;i++)
 | |
| 				{
 | |
| 					retval=retval+"\r\n"+PrettyNode(nd.ChildNodes.Item(i),level+1);
 | |
| 				}
 | |
| 				retval=retval+"\r\n" + prefix + "</" + nd.Name + ">";
 | |
| 			}
 | |
| 			else
 | |
| 			{
 | |
| 				retval = prefix + "<" + nd.Name;
 | |
| 				for(int i=0;i<nd.Attributes.Count;i++)
 | |
| 				{
 | |
| 					retval=retval + " " + nd.Attributes.Item(i).Name + "='" + nd.Attributes.Item(i).Value + "'";
 | |
| 				}
 | |
| 				retval=retval+"/>";
 | |
| 			}
 | |
| 			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);
 | |
| 		}
 | |
| 	}
 | |
| }
 |