# مباحث متفرقه برنامه نویسی > XML و کاربرد آن > سوال: ایجاد درخت با xml در C#‎‎

## pooya_1868

سلام به همگی
من تو برنامه احتیاج دارم که خاصیت کنترل هایی که روی فرم قرار دارن را به صورت درختی در یه فایل 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

سلام.
می تونید بدین شکل عمل کنید:

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

مرســــی عزیز
میشه لطف کنی و تو یه مورد دیگه کمک کنی ؟

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


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

سلام.
وقتی میخواهید 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();
    }
}


موفق باشید.

----------

