Wrox Home  
Search P2P Archive for: Go

  Return to Index  

aspx thread: Xml & ArrayList Logic Problems


Message #1 by "Dean Santillan" <webmaster@5...> on Wed, 21 Aug 2002 00:26:19 +0900
I have an arraylist that holds values from
the database.

At present these values are {"En","Jp","Ch"}
these values correspond to languages.

I also have a xml file that has these values as
attribute values for the xmlattribute Langauge.

here is an example
<lbPageTitle Language="En" Css="Text" Value="Data" ToolTip="" LinkURL=""
Type="Label" />
 <lbPageTitle Language="Jp" Css="Text" Value="Data" ToolTip="" LinkURL=""
Type="Label" />

I have generated a XmlNodeList so that I can see
count how many nodes are in the list and which languages
are available.

This is where my problem arises. What i need to achieve is
to append a new xml fragment into the master document under the
current nodelist item with the Variable "Ch" as it is the only one not there
to update for example

<lbPageTitle Language="En" Css="Text" Value="Data" ToolTip="" LinkURL=""
Type="Label" />
<lbPageTitle Language="Jp" Css="Text" Value="Data" ToolTip="" LinkURL=""
Type="Label" />
<lbPageTitle Language="Ch" Css="Text" Value="Data" ToolTip="" LinkURL=""
Type="Label" />

But my logic is not working whatsoever, does any one have any ideas.

here is my full file for reference sake.

public class Scanner
	{
		/// <summary>
		/// This <c>String</c> provides a way to access the database connection
		/// information in the <c>Web.config</c> file.
		/// </summary>

		//private static String strConn 
ConfigurationSettings.AppSettings["strConn"];
		//private SqlConnection objConn = new SqlConnection(strConn);
		public ArrayList arrControlTypes()
		{
			ArrayList arrControls = new ArrayList();

			arrControls.Add("asp:Label");
			arrControls.Add("asp:Button");
			arrControls.Add("asp:ImageButton");
			arrControls.Add("asp:LinkButton");
			arrControls.Add("asp:HyperLink");

			return arrControls;

		}

		public String GetWebControl(String srLine)
		{
			int LineLength;
			int intInd;
			char Find = '"';

			LineLength = srLine.Length;
			intInd = srLine.IndexOf(Find.ToString(),0);
			srLine = srLine.Remove(0,intInd + 1);

			LineLength = srLine.Length;
			intInd = srLine.IndexOf(Find.ToString(),0);
			srLine = srLine.Remove(intInd,LineLength - intInd);

			return srLine;
		}

		public ArrayList arrExistingNodes(String FilePath)
		{
			ArrayList arrEC = new ArrayList();

			XmlTextReader objRdr = new XmlTextReader(FilePath);

			while (objRdr.Read())
			{
				if(objRdr.GetAttribute("Language") == "En")
				{
					arrEC.Add(objRdr.Name.ToString());
					arrEC.Remove("Ascx");
					arrEC.Remove("xml");
				}


			}
			objRdr.Close();
			return arrEC;

		}

		public void XmlGenerator(String FilePath)
		{

			String OrigFilePath = FilePath;
			String TempFilePath = "";
			String XMLFilePath = "";
			String XMLFileName = "";
			String OrigServerPath = "";
			String ServerPath = "";
			int FileLength = OrigFilePath.Length;
			int IndexOf = OrigFilePath.LastIndexOf("/") + 1;
			//
			TempFilePath = OrigFilePath.Remove(IndexOf,FileLength - IndexOf);
			OrigServerPath = HttpContext.Current.Server.MapPath(OrigFilePath);
			ServerPath = HttpContext.Current.Server.MapPath(TempFilePath);
			XMLFilePath = ServerPath + "XML\\";
			XMLFileName = OrigFilePath.Remove(0,IndexOf);
			XMLFileName = XMLFileName.Replace(".ascx",".xml");
			XMLFilePath = XMLFilePath + XMLFileName;
			XMLFilePath = XMLFilePath.Replace("~","");

			//Check to see if usercontro' exists
			if(File.Exists(OrigServerPath))
			{
				//If user control exists check to see if xml file has been generated
				if(File.Exists(XMLFilePath))
				{
					// if exists still have to decide what to do
					HttpContext.Current.Trace.Warn("Yes " + XMLFilePath + " Exists");
					ArrayList CurrentNodes = this.arrExistingNodes(XMLFilePath);
					this.UpdateXml(OrigServerPath, XMLFilePath, CurrentNodes);

				}
				else
				{
					//if it doesnt exist create it
					this.CreateNewXml(OrigServerPath, XMLFilePath);

				}
			}
			else
			{
				//if it doesnt exist send back with a message

HttpContext.Current.Response.Redirect(HttpContext.Current.Request.RawUrl.ToS
tring() + "&Mess=NoControl");
			}


		}
		public void UpdateXml(String MyControl, String XmlFile, ArrayList
ExistingNode)
		{

			FileStream objFs = new FileStream(MyControl, FileMode.Open,
FileAccess.Read);
			StreamReader objSr = new StreamReader(objFs);
			String Line;
			Content.Careers.Admin.Languages objLang = new
Content.Careers.Admin.Languages();
			ArrayList arrLang = objLang.SiteLanguages();
			StringWriter objSW = new StringWriter();
			ArrayList objArr = ExistingNode;
			XmlTextReader objTx = new XmlTextReader(XmlFile);
			XmlDocument objDoc = new XmlDocument();
			objDoc.Load(XmlFile);
			XmlNode newnode = objDoc.DocumentElement;


			ArrayList d = new ArrayList();

			while((Line = objSr.ReadLine()) != null)
			{

				foreach(String strControl in this.arrControlTypes())
				{
					if(Line.IndexOf(strControl.Trim(),0) > 0)
					{

						if(!objArr.Contains(this.GetWebControl(Line)))
						{
							XmlComment objElem1 = objDoc.CreateComment(this.GetWebControl(Line));
							newnode.AppendChild(objElem1);
							foreach(String s in arrLang)
							{
								XmlElement objElem = objDoc.CreateElement(this.GetWebControl(Line));
								objElem.SetAttribute("Language",s.Trim());
								objElem.SetAttribute("Css","Text");
								objElem.SetAttribute("Value","Data");
								objElem.SetAttribute("ToolTip","");
								objElem.SetAttribute("LinkURL","");
								objElem.SetAttribute("Type",strControl.Replace("asp:",""));

								newnode.AppendChild(objElem);
							}
						}
						else
						{

							// This where i am having difficulty

							XmlNodeList nList = newnode.SelectNodes(this.GetWebControl(Line));
							int newCount = nList.Count;
							int arrCount = arrLang.Count;


							foreach(XmlNode n in nList)
							{
								foreach(String lang in arrLang)
								{
									if(newCount < arrCount)
									{
										HttpContext.Current.Response.Write("<br><br>");
										HttpContext.Current.Response.Write(lang + "= Lang<br>");
										HttpContext.Current.Response.Write(n.Attributes["Language"].Value
+ "= Attribute<br>");
										if(n.Attributes["Language"].Value.Equals(lang.Trim().ToString()))
										{
											HttpContext.Current.Response.Write("EQAUL<br>");
										}
										else
										{
											HttpContext.Current.Response.Write("NOT EQAUL<br>");
										}

									}


									HttpContext.Current.Response.Write(n.Attributes["Language"].Value +
"==========<br>");
								}


							}

						}
					}
				}
			}
			objDoc.Save(XmlFile);
			objFs.Close();
			objSr.Close();
		}
		public void CreateNewXml(String MyControl, String XmlFile)
		{
			FileStream objFs = new FileStream(MyControl, FileMode.Open,
FileAccess.Read);
			StreamReader objSr = new StreamReader(objFs);
			String Line;
			XmlDocument Doc = new XmlDocument();
			Content.Careers.Admin.Languages objLang = new
Content.Careers.Admin.Languages();
			ArrayList arrLang = objLang.SiteLanguages();


			XmlTextWriter xmlWriter = new
XmlTextWriter(XmlFile,System.Text.Encoding.UTF8);
			xmlWriter.WriteStartDocument();
			xmlWriter.WriteStartElement("Ascx");



			while((Line = objSr.ReadLine()) != null)
			{
				foreach(String strControl in this.arrControlTypes())
				{
					if(Line.IndexOf(strControl.Trim(),0) > 0)
					{
						xmlWriter.WriteComment(GetWebControl(Line));
						foreach(String s in arrLang)
						{
							xmlWriter.WriteStartElement(GetWebControl(Line));
							xmlWriter.WriteAttributeString("Language",s.Trim());
							xmlWriter.WriteAttributeString("Css","Text");
							xmlWriter.WriteAttributeString("Value","Data");
							xmlWriter.WriteAttributeString("ToolTip","");
							xmlWriter.WriteAttributeString("LinkURL","");
							xmlWriter.WriteAttributeString("Type",strControl.Replace("asp:",""));
							xmlWriter.WriteEndElement();
						}
					}
				}
			}
			xmlWriter.WriteEndDocument();
			xmlWriter.Close();
			objFs.Close();
			objSr.Close();

			Doc.Save(xmlWriter);

		}


		public Scanner()
		{
			//
			// TODO: Add constructor logic here
			//
		}
	}


  Return to Index