如何修改自定义xml节点

时间:2013-03-09 20:39:10

标签: c# xml

我有一个xml文件,它是用这样的块构建的:

<BasicOptions id="OwnCrypt">
    <Font>Angsana New</Font>
    <FontColor>Aquamarine</FontColor>
    <FontSize>12</FontSize>
    <FontStyle>Normál</FontStyle>
    <BackgroundImage>Cryptonite\System\Resources\Media\Pics\grumpy.jpg</BackgroundImage>
    <ImageResolution>1280 X 1024</ImageResolution>
    <FormSize>1280 X 1024</FormSize>
    <FormPosition>CenterParent</FormPosition>
    <Opacity>70</Opacity>
</BasicOptions>

我在根元素中创建了六个这样的块(名为Options)。我有一些问题 <FormSize>节点,因为从选项表单中它可以得到空值(这意味着我不改变它的分辨率),然后我想将<FormSize>节点的值设置为基本分辨率形式。 这是更新程序按钮事件(如果它有帮助):

 private void button1_Click(object sender, EventArgs e)
        {
            boxes[0] = checkBox1;
            boxes[1] = checkBox2;
            boxes[2] = checkBox3;
            boxes[3] = checkBox4;
            boxes[4] = checkBox5;
            boxes[5] = checkBox6;
            ArrayList al = new ArrayList();
            ArrayList bl = new ArrayList();
            foreach (CheckBox cb in boxes)
            {
                if (cb.Checked)
                    al.Add(cb.Text);
            }
            if(comboBox1.Text=="")//Betűtípus
            {
                bl.Add("Times New Roman");
            }
            else
                bl.Add(comboBox1.Text);
            if (comboBox2.Text == "")//Betűszín
            {
                bl.Add("Fekete");
            }
            else
                bl.Add(comboBox2.Text);
            bl.Add(numericUpDown1.Value.ToString());//Betűméret
            if (comboBox3.Text == "")//Betűstílus
            {
                bl.Add("Normál");
            }
            else
                bl.Add(comboBox3.Text);
            if (comboBox4.Text == "")//háttérkép
            {
                bl.Add(@"Cryptonite\System\Resources\Media\Pics\grumpy.jpg");
            }
            else
                bl.Add(comboBox4.Text);
            if (comboBox5.Text == "")//háttérkép felbont
            {
                Xml.resRequest(al);
            }
            else
                bl.Add(comboBox5.Text);
            if (comboBox6.Text == "")//felbontás
            {
                Xml.resRequest(al);
            }
            else
                bl.Add(comboBox6.Text);
            if (comboBox7.Text == "")
            {
                bl.Add("WindowsDefault");
            }
            else
                bl.Add(comboBox7.Text);
            bl.Add(numericUpDown2.Value.ToString());
            Xml.Writer(al, bl);
            al.Clear();
            bl.Clear();
        }

它有一个获取值并提供给updater方法的命令,但是如果有人有更好的想法,这让我非常高兴。 :)

1 个答案:

答案 0 :(得分:0)

我会使用DTO对象来存储值,并使用其中一个内置序列化程序来构成xml。 http://msdn.microsoft.com/en-us/library/system.xml.serialization.xmlserializer.aspx

DTO类将具有可用于检测是否需要将值设置为默认值的属性。

public class Foo {
  private string _bar;
  public string Bar 
  {
    get { return String.IsNullOrEmpty(_bar) ? _bar = "default value" : _bar; }
    set { _bar = value; }
  } 
}

而不是填充ArrayList,填充DTO。