我正在尝试遍历xml节点及其childNode
。虽然这样做我试图检查dataList
是否包含childNode内部值,如果它不在List中,我将从xml中删除父节点。但我面临的问题是,在找到第一个条件后,foreach
循环结束,而来自顶部for
的统计数据循环。请在下面找到他的代码:
更新
List<XmlNode> deletenode = new List<XmlNode>();
for (int i = 0; i < xmlNodeList.Count; i++)
{
deletenode = new List<XmlNode>();
foreach (XmlNode node in xmlNodeList[i].ChildNodes)
{
if (node.Name == "testNode")
{
XmlNode delNode = node;
if (node.ChildNodes[0].Name.ToString() == "nodeName")
{
string[] childNodesplit = node.ChildNodes[0].InnerText.Split(',');
if (!dataList.Any(e => e.Equals(childNodesplit[0].ToString())))
{
delNode = node.ChildNodes[0].ParentNode;
deletenode.Add(delNode);
}
}
}
}
foreach (XmlNode nd in deletenode)
{
if (nd.Name == "testNode")
{
ElemList[i].RemoveChild(nd);
}
}
}
任何人都可以指出我在foreach循环中所做的错误,因此它不会在匹配一个条件时出现循环。
我更新了我的代码,但我无法删除这些节点
更新
我现在得到了解决方案,我错过了将deletenode
列表作为每个循环的新列表。
答案 0 :(得分:5)
删除节点的父节点,即在循环中运行的子节点。
delNode = node.ChildNodes[0].ParentNode; //PARENT !
xmlNodeList[i].RemoveChild(delNode); //REMOVE
如果必须删除它们,您可以:
将它们保存到单独的列表中
在函数末尾迭代该列表并删除所有节点 在里面,一个接一个