PDA

View Full Version : سوال: ایجاد درخت با xml در C#‎



pooya_1868
چهارشنبه 18 آبان 1390, 11:50 صبح
سلام به همگی
من تو برنامه احتیاج دارم که خاصیت کنترل هایی که روی فرم قرار دارن را به صورت درختی در یه فایل xml ثبت کنم
من از قطعه کد زیر استفاده میکنم:

XmlTextWriter textWriter = new XmlTextWriter("C:\\myXmFile.xml", null);
textWriter.WriteStartDocument();
foreach (Control ctl in this.Controls)
{
if (!(ctl is Button))
{
textWriter.WriteStartElement("Control");
textWriter.WriteStartElement("Name", "");
textWriter.WriteString(ctl.Name);
textWriter.WriteEndElement();

}
}
textWriter.Close();

ولی فایل xml بصورت زیر میشه :

- <Control>
<Name>label1</Name>
- <Control>
<Name>textBox1</Name>
</Control>
</Control>

که این درست نیست و من نمیخوام که کنترل دومی زیرمجموعه ی اولی بشه و در واقع باید به این صورت بشه :

- <Control>
<Name>label1</Name>
</Control>
- <Control>
<Name>textBox1</Name>
</Control>

خیلی خیلی ممنون میشم اگه راهنمایی بفرمایید...

mehdi.mousavi
چهارشنبه 18 آبان 1390, 12:16 عصر
سلام.
می تونید بدین شکل عمل کنید:

using (XmlTextWriter textWriter = new XmlTextWriter("d:\\myXmFile.xml", null))
{
textWriter.WriteStartDocument();
textWriter.WriteStartElement("Controls");

foreach (Control ctl in this.Controls)
{
if (!(ctl is Button))
{
textWriter.WriteStartElement("Control");
textWriter.WriteElementString("Name", ctl.Name);
textWriter.WriteEndElement();
}
}

textWriter.WriteEndElement();
}

موفق باشید.

pooya_1868
چهارشنبه 18 آبان 1390, 14:29 عصر
مرســــی عزیز
میشه لطف کنی و تو یه مورد دیگه کمک کنی ؟

این قطعه کد ارور میده :


foreach (Control ctl in this.Controls)
{
if (!(ctl is Button))
{
textWriter.WriteStartElement(ctl.Name);
textWriter.WriteElementString("forecolor", ctl.BackColor.ToArgb().ToString());
textWriter.WriteElementString("font", ctl.Font.Style.ToString());
textWriter.WriteAttributeString("style", ctl.Font.Style.ToString());
textWriter.WriteEndElement();
}
}

Attribute رو چطور باید وارد کنم که به مشکل نخورم !؟ اون قسمت تگ فونت میخوام به اینصورت دربیاد:
<Font Style="Regalar" Size=12>Arial</Font>

mehdi.mousavi
چهارشنبه 18 آبان 1390, 15:12 عصر
سلام.
وقتی میخواهید Attribute یک Element رو بنویسید، نمی تونید از WriteElementString برای نوشتن اون Element استفاده کنید. در نتیجه حلقه مورد نظر رو باید بدین شکل بنویسید:

foreach (Control ctl in this.Controls)
{
if (!(ctl is Button))
{
textWriter.WriteStartElement("Control");

textWriter.WriteStartElement(ctl.Name);

textWriter.WriteStartElement("Font");
textWriter.WriteAttributeString("style", ctl.Font.Style.ToString());
textWriter.WriteEndElement();

textWriter.WriteEndElement();
textWriter.WriteEndElement();
}
}


موفق باشید.