PDA

View Full Version : آموزش: نحوه خواندن و نوشتن فایل XML



erfantarighi
چهارشنبه 05 اسفند 1394, 10:09 صبح
سلام
در این تابیک قصد دارم به شما دوستان عزیز کار کردن با فایل های XML رو آموزش بدم

اول یه کلاس با اسم دلخواه میسازیم (در این مثال اسم کلاس LogFile.cs میباشد)

بعد کتابخانه های کار با فایل ها XML رو فراخوانی میکنیم :



using System.Xml;
using System.Xml.Linq;
using System.Xml.Resolvers;
using System.Xml.Schema;
using System.Xml.Serialization;
using System.Xml.XmlConfiguration;
using System.Xml.XPath;
using System.Xml.Xsl;



ما در این مثال به تمامی این کتابخانه ها نیاز نداریم صرفا جهت آشنایی شما دوستان عزیز با این کتابخانه ها اضافه شده .

در این مرحله یک کلاس عمومی اضافه میکنیم با اسم > Quote :



public class Quote
{
public string Timee;
public string Datee;
public string IPPP;
public string Actionn;
public string Userr;
}



در مرحله بعدی یک فانگشن با نام (WriteDocument) ایجاد میکنیم :



public void WriteDocument(Quote q)
{
var settings = new System.Xml.XmlWriterSettings
{
OmitXmlDeclaration = true,
Indent = true,
Encoding = UTF8Encoding.UTF8,
};
if (File.Exists(@"C:\text.xml") == false)
{
using (XmlWriter writer = XmlWriter.Create(@"C:\text.xml", settings))
{
writer.WriteStartDocument();
writer.WriteStartElement("LOGG");

writer.WriteStartElement("LOG");
writer.WriteAttributeString("User", q.Userr);
writer.WriteElementString("Date", q.Datee);
writer.WriteElementString("Time", q.Timee);
writer.WriteElementString("IP", q.IPPP);
writer.WriteElementString("Action", q.Actionn);
writer.WriteEndElement();
writer.WriteEndElement();
writer.WriteEndDocument();
writer.Flush();
writer.Close();
}

}
else
{
XDocument xDocument = XDocument.Load(@"C:\text.xml");
XElement root = xDocument.Element("LOGG");
IEnumerable<XElement> rows = root.Descendants("LOG");
XElement firstRow = rows.First();
firstRow.AddBeforeSelf(
new XElement("LOG",
new XElement("User", q.Userr),
new XElement("Date", q.Datee),
new XElement("Time", q.Timee),
new XElement("IP", q.IPPP),
new XElement("Action", q.Actionn)));
xDocument.Save(appadd);
}
}






این فانگشن ستینگ های مناسب مثل Encode رو برای فایل تنظیم کرده و در مرحله بعد وجود فایل رو چک میکنه اگر فایل XML وجود نداشت آن را ساخته و اطلاعات را در اون درج میکند ولی اگر فایل وجود داشت آن را باز کرده و اطلاعات جدید را در آن درج میکند .

حالا به یک فانگشن دگ احتیاج داریم که WriteDocument را فراخوانی و مقادیر مناسب را به آن ارجاع دهد .



public void setlogfile(string time, string date, string ip, string action, string user)
{
Quote que = new Quote { Timee = time, Datee = date, IPPP = ip, Actionn = action, Userr = user };
WriteDocument(que);
}



حالا در فرم خود میتوانید فانگشن setlogfile رو فراخوانی کنید تا فایل XML درج شود .

ببخشید اگه کدهارو زیاد باز نکردم یه مقدار وقت کم بود .

موفق باشید.

CodeforLife
جمعه 20 فروردین 1395, 03:14 صبح
سلام و ممنونم
اگر بخوام propertyهای یک کلاس رو در فایل xml ذخیره کنم و بعد اونها رو بازیابی کنم ؛ باید چه کار کنم ؟؟؟

CodeforLife
جمعه 20 فروردین 1395, 05:05 صبح
من این کد رو نوشتم برای اینکه بخوام object رو در فایل xml ذخیره کنه !
میدونم اشتباهه
میشه کمکم کنید

private void button1_Click(object sender, EventArgs e)
{
convert c = new convert();
XmlSerializer x = new XmlSerializer(c.GetType());
x.Serialize(Console.Out, x);
}
}
}
[XmlRootAttribute("Customer", Namespace = "", IsNullable = false)]
class convert
{
public convert()
{
str = "Hello World !";
}
public string str { get; set; }
}



exception دارم
139930

manocher.a
جمعه 20 فروردین 1395, 18:07 عصر
public partial class Form1 : Form {
public Form1()
{
InitializeComponent();
}





private void button2_Click(object sender, EventArgs e) //برای سیو کردن فایل
{
if (saveFileDialog1.ShowDialog()==DialogResult.OK)
{
List<object> Data = new List<object>();


foreach (object obj in listBox1.Items)
{
Data.Add(obj);
}


XmlSerializer Ser = new XmlSerializer(typeof(List<object>));


using (StreamWriter Writer = new StreamWriter(saveFileDialog1.FileName))
{
Ser.Serialize(Writer, Data);
}
}
}


private void button3_Click(object sender, EventArgs e)// برای خواندن از فایل
{
if (openFileDialog1.ShowDialog()==DialogResult.OK)
{
List<object> Data = new List<object>();


XmlSerializer Ser = new XmlSerializer(typeof(List<object>));


using (StreamReader Reader = new StreamReader(openFileDialog1.FileName))
{
Data = (List<object>)Ser.Deserialize(Reader);


foreach (object obj in Data)
{
listBox1.Items.Add(obj);
}
}
}
}




}

CodeforLife
شنبه 21 فروردین 1395, 08:28 صبح
سلام و ممنونم
من یه مشکل دیگه دارم ..میشه به این لینک یه سری بزنید
http://barnamenevis.org/showthread.php?521574-%D8%B0%D8%AE%DB%8C%D8%B1%D9%87-%D9%85%D9%82%D8%A7%D8%AF%DB%8C%D8%B1-%D8%AF%D8%B1-%D9%81%D8%A7%DB%8C%D9%84-xml