c# - 如何编写 Xelement 值?

标签 c# xml generics

我想创建一个方法,从 xml 文件中收集自定义子节点值并重写表单中的数据。我有一个想法,我在 ArrayList 中收集数据并将其提供给方法。但是我不能在 foreach 中更改它,因为它会抛出 ArgumentOutOfRangeException(尽管 ArraList 包含 8 个元素并且增量变量的值也是 8)。所以我会寻求帮助。

代码如下:

  public static void Search(ArrayList nodeIds, ArrayList values)
        {
            XDocument doc = XDocument.Load("Options.xml");
            int i = 0;
            foreach (XElement option in doc.Descendants("BasicOptions"))
            {
                foreach(string nodeId in nodeIds)
                {
                    if (option.Attribute("id").Value == nodeId)
                    {
                        foreach (XElement prop in option.Nodes())
                        {
                            prop.Value = values[i].ToString();
                            i++;
                        }
                    }
                }
            }
            doc.Save("Options.xml");
    }

最佳答案

在我看来,i 毫无疑问会超出范围,因为它是在 3 foreach 语句的外部声明的,并在中心 foreach。您应该重新考虑您的方法。

我建议,但不知道您的传入值或为什么调用它,将您的内部 foreach 重新声明为 for 语句,如下所示:

public static void Search(ArrayList nodeIds, ArrayList values)
{
    XDocument doc = XDocument.Load("Options.xml");
    foreach (XElement option in doc.Descendants("BasicOptions"))
    {
        foreach (string nodeId in nodeIds)
        {
            if (option.Attribute("id").Value == nodeId)
            {
                var nodes = option.Nodes().ToList();
                for (int i = 0; i < nodes.Count && i < values.Count; i++)
                {
                    XElement node = (XElement)nodes[i];
                    node.Value = values[i].ToString();
                }
            }
        }
    }
    doc.Save("Options.xml");
}

关于c# - 如何编写 Xelement 值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15249109/

相关文章:

c# - 重定向会避免重复发布吗?

android - Android 上标的顶部被剪裁

scala - 声明返回枚举的泛型方法

c# - 使用泛型在类的值类型之间进行转换

C# 泛型 : Inserting T as the where T : IComparable<T> interface conflict

c# - 在 x86 中编译引用 C++/CLI DLL 的 C# 项目时,MSBuild 无法生成

c# - 默认选择第一项

c# - 如何使用 Visual Studio 2019 社区创建 .NET Core 3 控制台应用程序?

java - 使用 XSLT 为所有节点生成 XML 的 xpath

java - JAX-B 中的映射序列化会产生不需要的 XML 命名空间和前缀