c#在保存到文件之前附加XDocument

时间:2018-08-07 14:43:08

标签: c# xml linq

我是C#的入门者,正在尝试使用LINQ将XML文件与应用程序的配置数据一起保存。

我希望文件完成后的结构如下所示:

<UABA>
  <Configure_Tab>
    <Actions_List>
      <ListItem_1 Position_X="1080" Position_Y="1920" RGB="255,255,255" Is_Colour="TRUE" Target="F1" Button="1" />
      <ListItem_2 Position_X="1080" Position_Y="1920" RGB="255,255,255" Is_Colour="TRUE" Target="F1" Button="1" />
      <ListItem_3 Position_X="1080" Position_Y="1920" RGB="255,255,255" Is_Colour="TRUE" Target="F1" Button="1" />
      <ListItem_4 Position_X="1080" Position_Y="1920" RGB="255,255,255" Is_Colour="TRUE" Target="F1" Button="1" />
    </Actions_List>
  </Configure_Tab>
</UABA>

我正在从ListView读取数据,现在我的代码如下:

public static void SaveConfiguration(ListViewItemCollection items)
{
    XDocument doc = new XDocument(new XElement("UABA",
                                       new XElement("Configure_Tab",
                                           new XElement("Actions_List",
                                           new XElement("ListItem_1", 
                                           new XAttribute("Position_X", "1080"),
                                           new XAttribute("Position_Y","1920"),
                                           new XAttribute("RGB", "255,255,255"),
                                           new XAttribute("Is_Colour", "TRUE"),
                                           new XAttribute("Target", "F1"),
                                           new XAttribute("Button", "1"))))));
    doc.Save("MySettings.xml");
}
对于ListView的每个新行,

ListItem_1将需要增加(例如,ListItem_2,ListItem_3等),并且需要从当前行的SubItems中读取以上属性。我知道我可以使用这样的for循环:

for (int i = 0; i < items.Count; i++)
{  
    for (int j = 1; j < items[i].SubItems.Count; j++)
    {

    }
 }

其中“ i”是当前的ListView行,“ j”是SubItem计数,但是我不确定在写入文件之前如何附加当前的XDocument。

感谢您的帮助!

1 个答案:

答案 0 :(得分:0)

因此,在进行了更多的研究和研究之后,我找到了自己问题的答案。

using System.Xml.Linq;
using System.Diagnostics;
using static System.Windows.Forms.ListView;

public static void SaveConfiguration(ListViewItemCollection items)
{
    XDocument doc = new XDocument(new XElement("UABA",
    new XElement("Configure_Tab",
    new XElement("Actions_List"))));

    for (int i = 0; i < items.Count; i++)
    {
        doc.Element("UABA").Element("Configure_Tab").Element("Actions_List").Add(new XElement("ListItem_" + i, items[i].Checked));

        for (int j = 0; j < items[i].SubItems.Count; j++)
        {
            if (j == 0)
                doc.Element("UABA").Element("Configure_Tab").Element("Actions_List").Element("ListItem_" + i).Add(new XAttribute("Position_X", items[i].SubItems[j].Text));
            if (j == 1)
                doc.Element("UABA").Element("Configure_Tab").Element("Actions_List").Element("ListItem_" + i).Add(new XAttribute("Position_Y", items[i].SubItems[j].Text));
            if (j == 2)
                doc.Element("UABA").Element("Configure_Tab").Element("Actions_List").Element("ListItem_" + i).Add(new XAttribute("RGB", items[i].SubItems[j].Text));
            if (j == 3)
                doc.Element("UABA").Element("Configure_Tab").Element("Actions_List").Element("ListItem_" + i).Add(new XAttribute("Is_Colour", items[i].SubItems[j].Text));
            if (j == 4)
                doc.Element("UABA").Element("Configure_Tab").Element("Actions_List").Element("ListItem_" + i).Add(new XAttribute("Target", items[i].SubItems[j].Text));
            if (j == 5)
                doc.Element("UABA").Element("Configure_Tab").Element("Actions_List").Element("ListItem_" + i).Add(new XAttribute("Press_Button", items[i].SubItems[j].Text));
        }
    }

    doc.Save("MySettings.xml");
}