PDA

View Full Version : سوال: ارسال اطلاعات به فایل xml



niknam_mh
دوشنبه 20 اردیبهشت 1400, 18:10 عصر
سلام دوستان
من نیاز دارم که تو سورس وی بی دات نتم از داخل نرم افزار اطلاعاتی رو بفرستم به فایل xml یا sxml که مثل گزینه زیر باشه و در هر دفعه یکی اضاف کنه بفرستم:


<RizSnd>
<Rdif>1</Rdif>
<CodMoin>مقدار</CodMoin>
<CodTfzili>مقدار</CodTfzili>
<Shrh>مقدار</Shrh>
<MblgBdhkar>0</MblgBdhkar>
<MblgBstankar>مقدار</MblgBstankar>
<Sth5>0</Sth5>
<Sth6>0</Sth6>
<Del>true</Del>
<bdhkar>0</bdhkar>
<bstankar>مقدار</bstankar>
<Mgdar>0</Mgdar>
<TdadArz>0</TdadArz>
</RizSnd>


دوستان راهنمای کنید خیلی ضروریه ممنون میشم

the king
دوشنبه 20 اردیبهشت 1400, 20:44 عصر
سلام دوستان
من نیاز دارم که تو سورس وی بی دات نتم از داخل نرم افزار اطلاعاتی رو بفرستم به فایل xml یا sxml که مثل گزینه زیر باشه و در هر دفعه یکی اضاف کنه بفرستم:


<RizSnd>
<Rdif>1</Rdif>
<CodMoin>مقدار</CodMoin>
<CodTfzili>مقدار</CodTfzili>
<Shrh>مقدار</Shrh>
<MblgBdhkar>0</MblgBdhkar>
<MblgBstankar>مقدار</MblgBstankar>
<Sth5>0</Sth5>
<Sth6>0</Sth6>
<Del>true</Del>
<bdhkar>0</bdhkar>
<bstankar>مقدار</bstankar>
<Mgdar>0</Mgdar>
<TdadArz>0</TdadArz>
</RizSnd>


دوستان راهنمای کنید خیلی ضروریه ممنون میشم

وقتی شما یک کلاسی داشته باشید (که فرضا مشخصه یا فیلد هایی به اسم Rdif و CodMoin داره)، XmlSerializer خیلی ساده شیء اون کلاس رو تبدیل می کنه به XML یا برعکس XML رو تبدیل می کنه به شیء اون کلاس.

فرض کنیم همچین کلاسی دارید :

Class RizSnd
Public Rdif As Integer
Public CodMoin As Integer
Public CodTfzili As Integer
End Class


یا همچین کلاسی :

Class RizSnd
Public Property Rdif As Integer
Public Property CodMoin As Integer
Public Property CodTfzili As Integer
End Class


اونوقت اگر می خواهید XML بدون اضافه کردن Declaration استاندارد XML نوشته بشه، مثل اون مثال خودتون :

Public Shared Function ObjectToXml (obj As Object) As String
Dim serializer = New Xml.Serialization.XmlSerializer (obj.GetType ())
Dim settings = New Xml.XmlWriterSettings ()
Dim namespaces = New Xml.Serialization.XmlSerializerNamespaces (New Xml.XmlQualifiedName () {Xml.XmlQualifiedName.Empty})
settings.OmitXmlDeclaration = True
settings.Indent = True
Using w As New IO.StringWriter ()
Using ww = Xml.XmlWriter.Create (w, settings)
serializer.Serialize (ww, obj, namespaces)
Return w.ToString ()
End Using
End Using
End Function


یا همراه با Declaration استاندارد نوشته بشه :

Public Shared Function ObjectToXml (obj As Object) As String
Dim serializer = New Xml.Serialization.XmlSerializer (obj.GetType ())
Using w As New IO.StringWriter ()
serializer.Serialize (w, obj)
Return w.ToString ()
End Using
End Function


مثلا :

Dim r As New RizSnd
Dim xml = ObjectToXml (r)
MessageBox.Show (xml)

niknam_mh
جمعه 24 اردیبهشت 1400, 09:19 صبح
سلام دوست عزیز
ممنونم از پاسختون از وقتی که گذاشتید حالا چند تا سوال دارم:
1- چطور بهشون مقدار بدیم
2- چطور بفرستیمش رو فایل xml
3- چطور هر دفعه یه ردیف بهش اضافه بشه
4- چطور میتونیم از روی فایل لودش کنیم داخل دیتا گرید ویو

ممنون از شما

hamidrezax1
جمعه 24 اردیبهشت 1400, 10:05 صبح
سلام دوست عزیز وقت بخیر
دوست عزیزمون the king (https://barnamenevis.org/member.php?259237-the-king) توضیحات خوبی ارائه دادند و به نظرم کامل و جامع بود منتحی من هم یک نظری دارم
اطلاعات که قراره ذخیره کنی رو حالا از داخل دیتاگرید و یا دیتاست یا دیتاتیبل.مستقیم xml کن اینجوری فکر کنم کارت راحتتر بشه.چون فکر میکنم میخوای هر سری یک ردیف به اطلاعات اضافه کنی

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





Public Class Form1


'......................................... تیبل رو تعریف میکنیم...................................... ...


Dim datatable As New DataTable


Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click




'......................................... نام جدول انتخاب میکنیم...................................... ...


datatable.TableName = "RizSnd"




'......................................... اینجا بر اساس فیلدی که خواستی یک دیتاتیبل تعریف میکنیم و نام جدول انتخاب میکنیم...................................... ...




datatable.Columns.Add("CodMoin")
datatable.Columns.Add("CodTfzili")
datatable.Columns.Add("Shrh")
datatable.Columns.Add("MblgBdhkar")
datatable.Columns.Add("MblgBstankar")
datatable.Columns.Add("Sth5")
datatable.Columns.Add("Sth6")
datatable.Columns.Add("Del")
datatable.Columns.Add("bdhkar")
datatable.Columns.Add("bstankar")
datatable.Columns.Add("Mgdar")
datatable.Columns.Add("TdadArz")




'..............................................د این قسمت یه ردیف به جدول اضافه میکنیم و هر جور خواستید بهش مقدار میدین.......................................
datatable.Rows.Add()
datatable.Rows(0)("CodMoin") = "1"
datatable.Rows(0)("CodTfzili") = "مقدار"
datatable.Rows(0)("Shrh") = "مقدار"
datatable.Rows(0)("MblgBdhkar") = "0"
datatable.Rows(0)("MblgBstankar") = "مقدار"
datatable.Rows(0)("Sth5") = "0"
datatable.Rows(0)("Sth6") = "0"
datatable.Rows(0)("Del") = "true"
datatable.Rows(0)("bdhkar") = "0"
datatable.Rows(0)("bstankar") = "مقدار"
datatable.Rows(0)("Mgdar") = "0"
datatable.Rows(0)("TdadArz") = "0"




'................................................. ......مثلا من میخوام دو تا ردیف داشته باشه جدولم....................................
datatable.Rows.Add()
datatable.Rows(1)("CodMoin") = "2"
datatable.Rows(1)("CodTfzili") = "مقدار"
datatable.Rows(1)("Shrh") = "مقدار"
datatable.Rows(1)("MblgBdhkar") = "0"
datatable.Rows(1)("MblgBstankar") = "مقدار"
datatable.Rows(1)("Sth5") = "0"
datatable.Rows(1)("Sth6") = "0"
datatable.Rows(1)("Del") = "true"
datatable.Rows(1)("bdhkar") = "0"
datatable.Rows(1)("bstankar") = "مقدار"
datatable.Rows(1)("Mgdar") = "0"
datatable.Rows(1)("TdadArz") = "0"






'................................اینجا اطلاعات رو توی دیتاگرید نمایش میده........................................


Me.DataGridView1.DataSource = datatable




'................................xml........این جا بهش مسیر برای ذخیره میدیم................................
datatable.WriteXml("C:\Desktop\900\1.xml")


End Sub


Private Sub Button2_Click(sender As System.Object, e As System.EventArgs) Handles Button2.Click


'......................................... یه دیتاست تعریف میکنیم...................................... ...


Dim DataSet As New DataSet


'................................xml........این جا بهش مسیر برای بازگرداندن اطلاعات میدیم................................
DataSet.ReadXml("C:Desktop\900\1.xml")


'......................................... تیبل رو تعریف میکنیم...................................... ...
datatable = DataSet.Tables("RizSnd")


'................................اینجا اطلاعات رو توی دیتاگرید نمایش میده........................................
Me.DataGridView1.DataSource = datatable
End Sub
End Class

niknam_mh
جمعه 24 اردیبهشت 1400, 10:32 صبح
سلام آقا حمیدرضا گل
ممنونم از لطف شما و دوست عزیزمون the king (https://barnamenevis.org/member.php?259237-the-king)

niknam_mh
جمعه 24 اردیبهشت 1400, 18:22 عصر
سلام دوست عزیز
الان فایلی که بوجود میاد به صورت زیر است :


<?xml version="1.0" standalone="yes"?>
<DocumentElement>
<RizSnd>
<CodMoin>1</CodMoin>
<CodTfzili>مقدار</CodTfzili>
<Shrh>مقدار</Shrh>
<MblgBdhkar>0</MblgBdhkar>
<MblgBstankar>مقدار</MblgBstankar>
<Sth5>0</Sth5>
<Sth6>0</Sth6>
<Del>true</Del>
<bdhkar>0</bdhkar>
<bstankar>مقدار</bstankar>
<Mgdar>0</Mgdar>
<TdadArz>0</TdadArz>
</RizSnd>
</DocumentElement>


ولی من می خواهم یه فایل برام بسازه به صورت زیر:

<?xml version="1.0" standalone="yes"?>
<DsSnd xmlns="http://tempuri.org/DsSnd.xsd">
<RizSnd>
<CodMoin>1</CodMoin>
<CodTfzili>مقدار</CodTfzili>
<Shrh>مقدار</Shrh>
<MblgBdhkar>0</MblgBdhkar>
<MblgBstankar>مقدار</MblgBstankar>
<Sth5>0</Sth5>
<Sth6>0</Sth6>
<Del>true</Del>
<bdhkar>0</bdhkar>
<bstankar>مقدار</bstankar>
<Mgdar>0</Mgdar>
<TdadArz>0</TdadArz>
</RizSnd>
</DsSnd>


یعنی به جای <DocumentElement> و </DocumentElement> مقدار <DsSnd xmlns="http://tempuri.org/DsSnd.xsd> و </DsSnd> قرار بده
به نظر شما راهی داره ؟
ممنون میشم راهنماییم کنید خیلی لازم دارم :قلب:

hamidrezax1
جمعه 24 اردیبهشت 1400, 19:49 عصر
دوست عزیز بعضی مواقع راهکارهایی هست که شما رو به جواب سریع میرسونه شاید اصولی نباشه اما کار راه اندازه.از دوستان میخوام که لطف کننو اصولی راهنمایی کنند اما چون احتمالا درگیر این کار هستید میتونید در آخر بعد از تهیه فایل xml از این کد استفاده کنید:چشمک:





'................................xml........این جا بهش مسیر برای ذخیره میدیم................................
datatable.WriteXml("C:Desktop\900\1.xml")




Dim fileData As String
fileData = File.ReadAllText("C:Desktop\900\1.xml")
Dim a As String = "<?xml version=""1.0""" + " standalone=" + """yes""" + "?>"
fileData = fileData.Replace(a, "")
fileData = fileData.Replace("<DocumentElement>", "")
fileData = fileData.Replace("</DocumentElement>", "")
fileData = "<?xml version=""1.0""" + " standalone=" + """yes""" + "?>" + vbCrLf + "<DsSnd xmlns=" + """http://tempuri.org/DsSnd.xsd""" + ">" & fileData & "</DsSnd>"
File.WriteAllText("C:Desktop\900\1.xml", fileData)

niknam_mh
جمعه 24 اردیبهشت 1400, 19:55 عصر
دوست عزیز جناب hamidrezax1 (https://barnamenevis.org/member.php?365662-hamidrezax1)
نمی دونم چطور تشکر کنم خیلی عالی بود کارم راه افتاد خیلی بهش نیاز داشتم خودم اصلا با فایل ها تا حالا کار نکرده بودم خدا خیرت بده قربون معرفتت که وقت گذاشتی:قلب::قلب::قلب:

niknam_mh
شنبه 25 اردیبهشت 1400, 09:28 صبح
سلام دوست عزیز
اگه بخوایم ابتدا اطلاعات رو بفرستیم رو دیتاگرید ویو و بعد ارسال بشه رو فایل و همچنین بتونیم ردیف خاصی رو حذف یا ویرایش کنیم امکانش هست؟؟؟

hamidrezax1
دوشنبه 27 اردیبهشت 1400, 17:15 عصر
سلام دوست عزیز میشه با مثال سوالتون توضیح بدین

niknam_mh
سه شنبه 04 خرداد 1400, 20:59 عصر
سلام دوست عزیز میشه با مثال سوالتون توضیح بدین

سلام دوست عزیزنرم افزاری که من دارم مینویسم از چند جای مختلف مورد استفاده قرار می گیره و همه اطلاعات در یک دیتابیس که روی سرور هست قرار می گیره حالا من می خوام تو یه بازه زمانی اطلاعات رو لود کنم داخل یه دیتاگرید ویو و از اونجا بفرستم رو فایل xml
حالا شما نطرتون چیه؟
بهترین راه حل چیه؟
ممنونم

hamidrezax1
جمعه 07 خرداد 1400, 14:16 عصر
سلام دوست عزیز ببخشید که دیر جواب دادم.اول از همه بهتره اطلاعات رو داخل یک دیتاتیبل بفرستین چون قبل و یا بعد از ورود اطلاعات شما به این دیتاتیبل دسترسی دارین.قبلش میتونید با شرط هایی که مد نظرتون هست از ورود اطلاعات جلوگیری کنید و بعدش هم میتونید اون ردیف مورد نظر رو توی دیتاتیبل ویرایش و یا حذف کنید.آخر کار هم همون خروجی که مد نظرتون هست رو دریافت کنید
موفق باشید