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
//
}
}