PDA

View Full Version : سوال: نحوه خواندن و نوشتن اطلاعات در فایل xml



mohammad kafiyan
پنج شنبه 24 آذر 1390, 14:25 عصر
با سلام به دوستان
من از دستورات زیر برای نوشتن رشته attch to database , connection string در فایل xml استفاده می کنم فایل xml ساخته می شود و اطلاعات در فایل xml نوشته می شود فقط مشکل اینجا است که کاربر وقتی دگمه ثبت را می زنه اطلاعات در فایل xml نوشته می شود و اگر همان لحظه خواست تغییرات دوباره اعمال کنه و دوباره دگمه ثبت را می زنه ادامه دادها در xml نوشته می شه ولی من میخواهم دادهای قبلی با تغییرات جدید تغییر کنه در فایل xml


XmlTextWriter writer = new XmlTextWriter(Path.GetFullPath(@"Xml.xml"), System.Text.Encoding.UTF8);

XmlWriterSettings settings = new XmlWriterSettings();
settings.Indent = true;
writer.WriteStartDocument();
writer.WriteComment("This file is generated by the program.");
writer.WriteStartElement("Configuration");
writer.WriteStartElement("AtachDatabase");
writer.WriteElementString("ADb", db_master);
writer.WriteStartElement("ConnectionString");
writer.WriteElementString("CSTR", db_name);
writer.WriteEndElement();
writer.WriteFullEndElement();
writer.WriteEndDocument();
writer.Flush();
writer.Close();

سوال دیگر اینکه نحوه ی خواندن این اطلاعات را از xml میخوام ، چگونه این اطلاعات را بخونم
با ت

سوداگر
پنج شنبه 24 آذر 1390, 14:48 عصر
برای درج اطلاعات از کد Update هم میشه استفاده کرد، در اون صورت اگه وجود داشت به روز رسانی میشه.
برای خوندن همه اطلاعات هم، ساده ترین راه استفاده از XmlReader هست

XmlReader rdr = XmlReader.Create(strFilePath);
while (rdr.Read())
{
if(rdr.NodeType == XmlNodeType.Text)
{
listBox1.Items.Add(rdr.Value);
}
}

mohammad kafiyan
پنج شنبه 24 آذر 1390, 19:48 عصر
با تشکر دوست عزیز Dezfoul (http://barnamenevis.org/member.php?155327-Dezfoul) می شه کد آنرا هم بگویید چگونه است
که بتوانم اطلاعات تک به تک(فیلد به فیلد) را از xml دریافت کنم و در تعدادی textbox این فیلدها را نمایش بدهم
و این به چه صورت است
برای درج اطلاعات از کد Update هم میشه استفاده کرد، در اون صورت اگه وجود داشت به روز رسانی میشه.

faravaghi
پنج شنبه 24 آذر 1390, 21:48 عصر
سلام دوست خوب،
اینم یک نمونه:
<?xml version="1.0" encoding="utf-8"?>
<Configuration>
<ConnectionString>
<DataSource>.\SQLEXPRESS</DataSource>
<InitialCatalog>Your_Db</InitialCatalog>
<UserID>
</UserID>
<Password>
</Password>
<IntegratedSecurity>True</IntegratedSecurity>
<Security>False</Security>
</ConnectionString>
</Configuration>

protected internal void GetConnectionString()
{
try
{
if (File.Exists(_path))
{
XmlValidatingReader vr = new XmlValidatingReader(new XmlTextReader(_path));
vr.ValidationType = ValidationType.None;
vr.EntityHandling = EntityHandling.ExpandEntities;

XmlDocument doc = new XmlDocument();
doc.Load(vr);

vr.Close();

foreach (XmlElement element in doc.SelectNodes("//ConnectionString"))
{
_DataSource = element.ChildNodes[0].InnerText;
_InitialCatalog = element.ChildNodes[1].InnerText;
_UserID = element.ChildNodes[2].InnerText;
_Password = element.ChildNodes[3].InnerText;
_IntegratedSecurity = Convert.ToBoolean(element.ChildNodes[4].InnerText);
_Security = Convert.ToBoolean(element.ChildNodes[5].InnerText);
}
}
}
catch { }
}


private void SaveConnection(object sender, EventArgs e)
{
try
{
string path = "Configuration.xml";
XmlValidatingReader vr = new XmlValidatingReader(new XmlTextReader(path));
vr.ValidationType = ValidationType.None;
vr.EntityHandling = EntityHandling.ExpandEntities;

XmlDocument doc = new XmlDocument();
doc.Load(vr);

vr.Close();

foreach (XmlElement element in doc.SelectNodes("//ConnectionString"))
{
XmlNode root = doc.DocumentElement["ConnectionString"];

//Replace the DataSource Element Of XML Document
XmlElement elemDataSource = doc.CreateElement("DataSource");
elemDataSource.InnerText = builder.DataSource.ToString();
root.ReplaceChild(elemDataSource, root.ChildNodes[0]);

//Replace the InitialCatalog Element Of XML Document
XmlElement elemSInitialCatalog = doc.CreateElement("InitialCatalog");
elemSInitialCatalog.InnerText = builder.InitialCatalog.ToString();
root.ReplaceChild(elemSInitialCatalog, root.ChildNodes[1]);

//Replace the UserID Element Of XML Document
XmlElement elemUserID = doc.CreateElement("UserID");
elemUserID.InnerText = builder.UserID;
root.ReplaceChild(elemUserID, root.ChildNodes[2]);

//Replace the Password Element Of XML Document
XmlElement elemPassword = doc.CreateElement("Password");
elemPassword.InnerText = builder.Password;
root.ReplaceChild(elemPassword, root.ChildNodes[3]);

//Replace the IntegratedSecurity Element Of XML Document
XmlElement elemIntegratedSecurity = doc.CreateElement("IntegratedSecurity");
elemIntegratedSecurity.InnerText = builder.IntegratedSecurity.ToString();
root.ReplaceChild(elemIntegratedSecurity, root.ChildNodes[4]);

//Replace the Security Element Of XML Document
XmlElement elemSecurity = doc.CreateElement("Security");
elemSecurity.InnerText = Security.ToString();
root.ReplaceChild(elemSecurity, root.ChildNodes[5]);
}

doc.Save(path);
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}

mohammad kafiyan
جمعه 25 آذر 1390, 00:09 صبح
با سلام و تشکر faravaghi (http://barnamenevis.org/member.php?118616-faravaghi)
کد شما جواب داد می خواستم راجب این قسمت از کد کمی توضیح بدهی کارش چیست
بعد به شیvr که از XmlValidatingReader تعریف شده Warning گرفته چرا ؟چه کار کنم مشکل Warning حل شود


XmlValidatingReader vr = new XmlValidatingReader(new XmlTextReader(_path)); vr.ValidationType = ValidationType.None;
vr.EntityHandling = EntityHandling.ExpandEntities;

XmlDocument doc = new XmlDocument();
doc.Load(vr);

vr.Close();


در ضمن برای ثبت در xml که در بالا پست بیان کردم مشکل نداره
با تشکر

faravaghi
شنبه 26 آذر 1390, 00:06 صبح
سلام،
البته Warning که مشکل نیست. برنامه که اجرا بشه یعنی خطایی نداره. حالا این که چرا این VS به این خطها ایراد میگیره برمیگرده به بحث پشتیبانیش از این موارد.
و میگه این شئی متعلق به دات نت 2 است و برای استفاده برین از XmlReader استفاده کنید و این جور حرفا....
حالا شما اگه میخوای کارت بی نقص باشه و گیری توی اون نباشه به جای کد زیر :
XmlValidatingReader vr = new XmlValidatingReader(new XmlTextReader(path));
vr.ValidationType = ValidationType.None;
vr.EntityHandling = EntityHandling.ExpandEntities;

XmlDocument doc = new XmlDocument();
doc.Load(vr);

vr.Close();

از این کد استفاده کن :
XmlTextReader reader = new XmlTextReader(path);
reader.WhitespaceHandling = WhitespaceHandling.None;

XmlDocument doc = new XmlDocument();
doc.Load(reader);

reader.Close();

modern_amin
چهارشنبه 05 بهمن 1390, 16:41 عصر
کسی سورسی رو در این خصوص نداره؟

hosseinrasouli
دوشنبه 28 فروردین 1391, 13:42 عصر
سلام دوست خوب،
اینم یک نمونه:
<?xml version="1.0" encoding="utf-8"?>
<Configuration>
<ConnectionString>
<DataSource>.\SQLEXPRESS</DataSource>
<InitialCatalog>Your_Db</InitialCatalog>
<UserID>
</UserID>
<Password>
</Password>
<IntegratedSecurity>True</IntegratedSecurity>
<Security>False</Security>
</ConnectionString>
</Configuration>

protected internal void GetConnectionString()
{
try
{
if (File.Exists(_path))
{
XmlValidatingReader vr = new XmlValidatingReader(new XmlTextReader(_path));
vr.ValidationType = ValidationType.None;
vr.EntityHandling = EntityHandling.ExpandEntities;

XmlDocument doc = new XmlDocument();
doc.Load(vr);

vr.Close();

foreach (XmlElement element in doc.SelectNodes("//ConnectionString"))
{
_DataSource = element.ChildNodes[0].InnerText;
_InitialCatalog = element.ChildNodes[1].InnerText;
_UserID = element.ChildNodes[2].InnerText;
_Password = element.ChildNodes[3].InnerText;
_IntegratedSecurity = Convert.ToBoolean(element.ChildNodes[4].InnerText);
_Security = Convert.ToBoolean(element.ChildNodes[5].InnerText);
}
}
}
catch { }
}


private void SaveConnection(object sender, EventArgs e)
{
try
{
string path = "Configuration.xml";
XmlValidatingReader vr = new XmlValidatingReader(new XmlTextReader(path));
vr.ValidationType = ValidationType.None;
vr.EntityHandling = EntityHandling.ExpandEntities;

XmlDocument doc = new XmlDocument();
doc.Load(vr);

vr.Close();

foreach (XmlElement element in doc.SelectNodes("//ConnectionString"))
{
XmlNode root = doc.DocumentElement["ConnectionString"];

//Replace the DataSource Element Of XML Document
XmlElement elemDataSource = doc.CreateElement("DataSource");
elemDataSource.InnerText = builder.DataSource.ToString();
root.ReplaceChild(elemDataSource, root.ChildNodes[0]);

//Replace the InitialCatalog Element Of XML Document
XmlElement elemSInitialCatalog = doc.CreateElement("InitialCatalog");
elemSInitialCatalog.InnerText = builder.InitialCatalog.ToString();
root.ReplaceChild(elemSInitialCatalog, root.ChildNodes[1]);

//Replace the UserID Element Of XML Document
XmlElement elemUserID = doc.CreateElement("UserID");
elemUserID.InnerText = builder.UserID;
root.ReplaceChild(elemUserID, root.ChildNodes[2]);

//Replace the Password Element Of XML Document
XmlElement elemPassword = doc.CreateElement("Password");
elemPassword.InnerText = builder.Password;
root.ReplaceChild(elemPassword, root.ChildNodes[3]);

//Replace the IntegratedSecurity Element Of XML Document
XmlElement elemIntegratedSecurity = doc.CreateElement("IntegratedSecurity");
elemIntegratedSecurity.InnerText = builder.IntegratedSecurity.ToString();
root.ReplaceChild(elemIntegratedSecurity, root.ChildNodes[4]);

//Replace the Security Element Of XML Document
XmlElement elemSecurity = doc.CreateElement("Security");
elemSecurity.InnerText = Security.ToString();
root.ReplaceChild(elemSecurity, root.ChildNodes[5]);
}

doc.Save(path);
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}
سلام مهندس . من فایل app.config اینه

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<connectionStrings>
<add name="ContextContainer" connectionString="metadata=res://*/Context.csdl|res://*/Context.ssdl|res://*/Context.msl;provider=System.Data.SqlClient;provide r connection string=&quot;Data Source=.;Initial Catalog=TalentDB;User ID=sa;Password=2599;MultipleActiveResultSets=True&quot;" providerName="System.Data.EntityClient" />
</connectionStrings>
</configuration>

اما کد شما رو هر کاری کردم برای خواندن و نوشتن در کانکشن استرینگم جواب نداد ، لطفا کمک کنید .
اینم کدها :
protected internal void GetConnectionString()
{
try
{
string _path = "Appconfig.exe.config";
XmlValidatingReader vr = new XmlValidatingReader(new XmlTextReader(_path));
vr.ValidationType = ValidationType.None;
vr.EntityHandling = EntityHandling.ExpandEntities;

XmlDocument doc = new XmlDocument();
doc.Load(vr);

vr.Close();

foreach (XmlElement element in doc.SelectNodes("//connectionStrings//add"))
{
txt_datasource.Text = element.ChildNodes[0].InnerXml;
txt_database.Text = element.ChildNodes[1].InnerXml ;
txt_user .Text = element.ChildNodes[2].InnerXml ;
txt_pass .Text = element.ChildNodes[3].InnerXml ;

}

}
catch (Exception x) { MessageBox.Show("" + x); }
}


private void SaveConnection(object sender, EventArgs e)
{
try
{
string path = "Configuration.xml";
XmlValidatingReader vr = new XmlValidatingReader(new XmlTextReader(path));
vr.ValidationType = ValidationType.None;
vr.EntityHandling = EntityHandling.ExpandEntities;

XmlDocument doc = new XmlDocument();
doc.Load(vr);

vr.Close();

foreach (XmlElement element in doc.SelectNodes("//ConnectionString"))
{
XmlNode root = doc.DocumentElement["ConnectionString"];

//Replace the DataSource Element Of XML Document
XmlElement elemDataSource = doc.CreateElement("DataSource");
elemDataSource.InnerText = txt_datasource.Text;
root.ReplaceChild(elemDataSource, root.ChildNodes[0]);

//Replace the InitialCatalog Element Of XML Document
XmlElement elemSInitialCatalog = doc.CreateElement("InitialCatalog");
elemSInitialCatalog.InnerText = txt_database.Text;
root.ReplaceChild(elemSInitialCatalog, root.ChildNodes[1]);

//Replace the UserID Element Of XML Document
XmlElement elemUserID = doc.CreateElement("UserID");
elemUserID.InnerText = txt_user.Text;
root.ReplaceChild(elemUserID, root.ChildNodes[2]);

//Replace the Password Element Of XML Document
XmlElement elemPassword = doc.CreateElement("Password");
elemPassword.InnerText = txt_pass.Text ;
root.ReplaceChild(elemPassword, root.ChildNodes[3]);

}

doc.Save(path);
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}

modern_amin
شنبه 28 مرداد 1391, 18:01 عصر
فایل سورسش هم میزارید؟