You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

移除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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.06 18:40:43