PDA

View Full Version : سوال: جستجو در فایل XML



systam
یک شنبه 07 تیر 1394, 01:31 صبح
سلام
من سایت رو زیرو کردن نتونستم مطلب مورد نظرم رو پیدا کنم
طبق این عکس
132670
میخوام کاربر عددی رو وارد کرد بگرده ببینه مقدار در فایل موجود هست یا نه فیلد id

pbm_soy
یک شنبه 07 تیر 1394, 02:03 صبح
یکی از راهها اینه که شما فایل xml را باز کرده و کل فایل را بخوانید و داده هایش را بریزید داخل یک آرایه یا arrayList و حالا میتوانید جستجو را در آن آرایه انجام دهید

ویا اینکه حتما لازم نیست داده هایی که از فایل میخوانید در آرایه ذخیره کنید هر آیتمی که از فایل میخوانید همون موقع آنرا با مقدار مورد جستجو مقایسه کنید

برای خواندن فایل xml میتوانید از لینکها زیر کمک بگیرید
http://csharp.net-informations.com/xml/how-to-read-xml.htm
http://stackoverflow.com/questions/642293/how-do-i-read-and-parse-an-xml-file-in-c
http://www.codeproject.com/Articles/4902/Reading-an-XML-file-using-NET

systam
یک شنبه 07 تیر 1394, 23:35 عصر
ممنوم از دوست عزیز
من چیزی حالیم نمیشه از صفحه های باید
نیاز دارم کسی برام توضیح بده
فیلم اموزشی سراغ ندارید
هست توی نت ولی لاتینه

علیرضا.ا
دوشنبه 08 تیر 1394, 00:50 صبح
سوال رو خوب نفهمیدم
واضح تر توضیح میدی؟

systam
دوشنبه 08 تیر 1394, 00:55 صبح
سلام
طبق این عکس
132705
من فیلدی به نام id دارم
که زمانی که در تکس مربوط اگر مقداری رو وارد کرد
اگر این مقدار در مقدار فیلد id وجود داشته باشه خطا بده

systam
دوشنبه 08 تیر 1394, 01:09 صبح
سلام
من اینطوری تونستم سرچ رو انجام بدم آیا درسته




System.Xml.XmlDocument doc = new System.Xml.XmlDocument();
doc.Load("database.xml");
var list = doc.GetElementsByTagName("id");
foreach (System.Xml.XmlElement item in list)
{
if (item.InnerText == Simulate.Val(TextBox1.Text).ToString())
{
MessageBox.Show("شماره رکورد تکراری");
}
}

علیرضا.ا
دوشنبه 08 تیر 1394, 01:20 صبح
اینو یه نگاه بنداز:
فکر کنم همونیه که میخای
http://setfa.net/images/hzxg7j9dj3duipfbaj8v.zip

systam
جمعه 12 تیر 1394, 02:04 صبح
سلام
خوب من با این کد میام زمانی که شماره ردیف رو وارد میکنم اطلاعات رو نمایش میده ولی
مثلا شماره 1 رو وارد میکنم میاد ردیف شماره 2 نشوننمیده
مقدار ورودی رو -1 هم میکنم باز ردیف شماره 1 رو برای من نمایش نمیده
XmlDocument doc = new XmlDocument();
doc.Load("database.xml");
XmlNode node = doc.DocumentElement.SelectSingleNode("/picbank");
foreach (XmlNode n in node)
{
if (n.ChildNodes[0].InnerText.Contains(TextBox5.Text))
{
//MessageBox.Show("ERR")
TextBox1.Text = Convert.ToInt32(doc.GetElementsByTagName("id")[n.ChildNodes[0].InnerText].InnerText).ToString();
TextBox2.Text = doc.GetElementsByTagName("name")[n.ChildNodes[0].InnerText].InnerText;
TextBox3.Text = doc.GetElementsByTagName("famile")[n.ChildNodes[0].InnerText].InnerText;
TextBox4.Text = doc.GetElementsByTagName("masir")[n.ChildNodes[0].InnerText].InnerText;
}
}

khokhan
جمعه 12 تیر 1394, 02:19 صبح
سلام
خوب من با این کد میام زمانی که شماره ردیف رو وارد میکنم اطلاعات رو نمایش میده ولی
مثلا شماره 1 رو وارد میکنم میاد ردیف شماره دو وارد میکنه مقدار ورودی رو -1 هم میکنم باز ردیف شماره 1 رو برای من نمایش نمیده
XmlDocument doc = new XmlDocument(); doc.Load("database.xml");
XmlNode node = doc.DocumentElement.SelectSingleNode("/picbank");
foreach (XmlNode n in node)
{
if (n.ChildNodes[0].InnerText.Contains(TextBox5.Text))
{
//MessageBox.Show("ERR")
TextBox1.Text = Convert.ToInt32(doc.GetElementsByTagName("id")[n.ChildNodes[0].InnerText].InnerText).ToString();
TextBox2.Text = doc.GetElementsByTagName("name")[n.ChildNodes[0].InnerText].InnerText;
TextBox3.Text = doc.GetElementsByTagName("famile")[n.ChildNodes[0].InnerText].InnerText;
TextBox4.Text = doc.GetElementsByTagName("masir")[n.ChildNodes[0].InnerText].InnerText;
}
}

حالا لازم نیست حتما روی این مسئله پافشاری کنین .................................بجاش می تونین از دیتاست اتفاده کنین چه همه کارها رو آسون می کنه
واگه زیاد می خوای شیک و مجلسی باشه از linq to xml استفاده کن


XElement mainItem = doc.Descendants("MainItem")
.Where(mi => mi.Attribute("ID").Value == "2")
.FirstOrDefault();

systam
جمعه 12 تیر 1394, 02:54 صبح
سلام استاد
دمت گرم همون دیتا ست خیلی بهتره و سریع تر کار میکنه و شیک مجلسی میشه :قهقهه:
DataSet ds = new DataSet();
DataView dv = null;
ds.ReadXml("database.xml");
dv = new DataView(ds.Tables[0]);
dv.Sort = "id";
int index = dv.Find(TextBox5.Text);
if (index == -1)
{
MessageBox.Show("شماره ردیف تکراری");
}
else
{
TextBox1.Text = dv[index]["id"].ToString();
TextBox2.Text = dv[index]["name"].ToString();
TextBox3.Text = dv[index]["famile"].ToString();
TextBox4.Text = dv[index]["masir"].ToString();
}