循环遍历XDocument并获取子节点的值

时间:2016-06-27 06:18:32

标签: c# xml

这是我的XML文件的样子。

$('.viewed[style="background:#F9F0D5"]').remove();

我实际上要做的是遍历表单中的每个控件并将Size和Location属性保存在XML文件中。 <PictureBoxes> <P14040105> <SizeWidth>100</SizeWidth> <SizeHeight>114</SizeHeight> <locationX>235</locationX> <locationY>141</locationY> </P14040105> <P13100105> <SizeWidth>100</SizeWidth> <SizeHeight>114</SizeHeight> <locationX>580</locationX> <locationY>274</locationY> </P13100105> </PictureBoxes> &gt;节点实际上是我的图片框的名称,我也需要使用该名称。

创建XML之后,我想尝试使用XML文件再次在表单上创建图片框。所以我需要的是获取<P...节点的名称和子节点的值。

1 个答案:

答案 0 :(得分:1)

您需要查看FormLoadFormClosing方法,以便从/向xml文件中加载和分别保存数据。

FormLoad方法中循环浏览PictureBoxes元素的子元素,并为每个元素创建一个PictureBox并从xml数据中设置它的值,如下所示:

protected override OnLoad(EventArgs e)
{
    base.OnLoad(e);

    var doc = XDocument.Load("path/to/xml/file");
    foreach(var element in doc.Descendant("PictureBoxes").Elements())
    {
        var pb = new PictureBox();
        pb.Name = element.Name.LocalName;
        pb.Size.Width = Convert.ToInt32(element.Element("SizeWidth").Value));
        // other properties here
        this.Controls.Add(pb);
    }
}

FormClosing做相反的事情 - 迭代图片框并将属性保存在xml中:

protected override void OnFormClosing(FormClosingEventArgs e)
{
    base.OnFormClosing(e);

    var doc = new XDocument();
    doc.Add(new XElement("PictureBoxes", 
        this.Controls.Where(c => c.GetType() == typeof(PictureBox))
            .Select(pb => new XElement(pb.Name,
                new XElement("SizeWidth", pb.Size.Width),
                new XElement("location", pb.Location.X)))));
    doc.Save("path/to/xml/file");
}