如何在 foreach 循环中删除 xmlnode?

2023-12-03

在下面的代码中,我使用 foreach 循环来检查节点列表中的每个节点并删除其中的一些节点。 删除一个节点后,foreach 循环抛出以下错误: “元素列表已更改。枚举操作无法继续”。 我怎样才能避免它?

public static XmlNodeList Scan(XmlNodeList nodeList)
        {
            string elementValue = null;
            foreach (XmlNode xmlElement in nodeList)
            {
                elementValue = xmlElement.InnerText;
                if (elementValue.Length >= 6 && elementValue.Substring(0, 3) == "999")
                {
                    continue;
                }
                else 
                {
                    XmlNode node = xmlElement.ParentNode;
                    node.RemoveChild(xmlElement);
                }
            }

            return nodeList;
        }

由于您并不是简单地从要循环的集合中删除项目,因此我不确定“使用 for 循环”是否有效。

下面需要两个步骤:

  1. 创建一个常规列表,其中包含要与其父级分离的所有元素。
  2. 通过迭代不受分离影响的常规列表,将这些元素与其父元素分离。
public static XmlNodeList Scan(XmlNodeList nodeList)
{
    List<XmlNode> toRemove = new List<XmlNode>();

    foreach (XmlNode xmlElement in nodeList)
    {
        string elementValue = xmlElement.InnerText;
        if (elementValue.Length < 6 || elementValue.Substring(0, 3) != "999")
        {
            toRemove.Add(xmlElement);
        }
    }

    foreach(XmlNode xmlElement in toRemove)
    {
        XmlNode node = xmlElement.ParentNode;
        node.RemoveChild(xmlElement);
    }

    return nodeList;
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在 foreach 循环中删除 xmlnode? 的相关文章

随机推荐