使用linq和c#将列表框项目保存为xml文件中的子项目

时间:2015-05-20 22:32:51

标签: c# xml linq

我有一个相对简单的Winforms应用程序并使用C#。我一直在使用LINQ(system.xml.linq)...我已经成功地将文本框项目(单个项目)保存到我的xml文件中。

我有一个项目列表框,希望该列表保存为xml文件中的子节点。所以我的xml最终输出看起来像这样:

<items>
 <centerName>My Center</centerName>
 <poc>Mr. Jones</poc>
 <servicedUnits>
    <state>Texas</state>
    <state>Iowa</state>
    <state>Hawaii</state>
 </servicedUnits>
</items>

我有这个代码,我一直用来写XML:

    private void writeFCATSettings()
    {
        XDocument doc = new XDocument
        (
            new XElement
              ("Items",
                new XElement("textBoxCenterName", textBoxCenterName.Text),
                new XElement("textBoxContactFirstName", textBoxContactFirstName.Text),   

                new XElement("servicedUnits", "<listBoxServicedUnits.Items>")

              )
          );
        doc.Save(@"Settings.xml");
    }

我很确定我需要将代码放在括号内的列表框中进行迭代。

最后..我发现这段代码会迭代我的列表...但是如果我只是将它粘贴到空间中......它就不起作用了。

XElement servicedUnits = new XElement("ServicedUnits");
        foreach (var item in listBoxServicedUnits.Items)
        {
            servicedUnits.Add(new XElement("unit", item));
        }

        XDocument document = new XDocument();
        document.Add(servicedUnits);

感谢您的任何想法...

ER

1 个答案:

答案 0 :(得分:0)

假设您的列表框项目是字符串,您可以这样做:

private void writeFCATSettings()
{
    XDocument doc = new XDocument(
        new XElement("Items",
            new XElement("textBoxCenterName", textBoxCenterName.Text),
            new XElement("textBoxContactFirstName", textBoxContactFirstName.Text),   
            new XElement("servicedUnits", 
                listBoxServicedUnits
                .Items
                .OfType<string>()
                .Select(item => new XElement("unit", item)))));
    doc.Save(@"Settings.xml");
}

或者,如果它们不是字符串或它们是混合类型,您可以这样做:

private void writeFCATSettings()
{
    XDocument doc = new XDocument(
        new XElement("Items",
            new XElement("textBoxCenterName", textBoxCenterName.Text),
            new XElement("textBoxContactFirstName", textBoxContactFirstName.Text),   
            new XElement("servicedUnits", 
                listBoxServicedUnits
                .Items
                .OfType<Object>()
                .Select(x => TransformYouObjectToAStringHere)
                .Select(item => new XElement("unit", item)))));
    doc.Save(@"Settings.xml");
}