在foreach循环中将xml值添加到列表中

时间:2017-12-13 20:22:04

标签: c# list loops iteration

我在查找如何在foreach循环中向列表中添加值时遇到问题。我想从XML文档中获取值(目前使用xpath)并将值添加到列表中。我遇到了一个错误,其中c#不允许你直接分配给foreach迭代变量,所以我不确定如何将值放入列表而不直接赋值给变量。

这是我的XML:

        List<string> options = null;

        foreach(string option in options)
        {
            option = config.XPathSelectElement("//config/options/option").Value;
            options.Add(option);
        }

这是我的代码:

{{1}}

我现在收到错误,因为我无法分配给迭代变量。使用Linq执行查询会更好吗?

2 个答案:

答案 0 :(得分:1)

修复XML以便解析之后,这将为您提供包含List<String>元素内部文本的option

var config = XDocument.Parse(@"<?xml version=""1.0"" encoding=""UTF-8""?>
<config>
    <optionList>
        <option>true</option>
        <option>false</option>
    </optionList>
</config>");

List<String> options = new List<string>();

//  We're now calling XPathSelectElements() -- elementS, plural. We want all
//  of them, not just the first one. 
foreach (var elem in config.XPathSelectElements("/config/optionList/option"))
{
    options.Add(elem.Value);
}

首先,我们创建要添加项目的列表。然后我们使用foreach循环遍历已经有东西的集合。

您可以使用LINQ执行此操作,但现在了解如何使用foreach循环更为重要。

答案 1 :(得分:0)

首先,您的XML文件中存在错误,因为您有一个不会打开的结束M = |7 8 9| |1 2 3| |4 5 6| 标记。

新XML ......

</directories>

加载XML ...

<?xml version="1.0" encoding="UTF-8"?>
<config>
    <optionList>
        <option>true</option>
        <option>false</option>
    </optionList>
</config>

检索您需要的信息......

XmlDocument memberLists = new XmlDocument();
            memberLists.Load(pathname);

            XmlNodeList memberlist = memberLists.SelectNodes("//config/optionlist");

希望这就是你所需要的。