遍历XDocument并获取子节点的值

本文关键字:子节点 获取 XDocument 遍历 | 更新日期: 2023-09-27 17:49:26

我的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>

我实际上要做的是循环通过每个控件在我的形式和保存大小和位置属性的XML文件。<P...> Node实际上是我的图片框的名称,我也需要使用该名称。

创建XML后,我想再次尝试使用XML文件在表单上创建图片框。因此,我需要得到<P...>节点的名称和子节点的值。

遍历XDocument并获取子节点的值

您需要查看FormLoad和FormClosing方法来分别将/中的数据加载和保存到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");
}