移除XmlNode所有子节点后父节点变为null,如何保留目标父节点?
解决方法
问题出在你操作后通过node.ParentNode访问父节点——当你移除父节点的所有子节点时,node(也就是<SpeedIndicator>节点)会被从父节点的子集合中移除,此时node的ParentNode属性会被置为null,但父节点本身并没有消失。
要正确获取处理后的父节点,你需要先保存父节点的引用,再执行移除操作,之后直接使用这个保存的引用即可:
方法一:使用你的RemoveAllChildren方法
// 先保存父节点的引用 XmlNode parentNode = node.ParentNode; // 移除所有子节点 string processedParentXml = RemoveAllChildren(parentNode); // 直接通过保存的引用访问父节点的OuterXml Console.WriteLine(parentNode.OuterXml); // 输出:<Parent xmlns="http://www.null.nl/zero"></Parent>
方法二:使用内置的RemoveAll方法
XmlNode本身提供了RemoveAll()方法,可以直接移除所有子节点和属性(如果只需要移除子节点,也可以用RemoveAllChildren(),不过RemoveAll()在这里也能满足需求,因为你的父节点没有额外属性):
XmlNode parentNode = node.ParentNode; parentNode.RemoveAll(); string parentOuterXml = parentNode.OuterXml; // 得到预期的结果
为什么原来的方式会得到null?
当node被从父节点中移除后,它与父节点的关联就断开了,.ParentNode自然返回null。但父节点对象本身依然存在,只是你不能再通过已被移除的node去访问它,必须提前保留父节点的引用。
内容的提问来源于stack exchange,提问作者Triodefreak
相关产品推荐
相关产品推荐

