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

如何移除XML同级节点?C#中用XmlDocument删除CreationDateTime对应的Value节点

解决XmlDocument移除CreationDateTime对应Value节点的问题

嘿,我来帮你搞定这个问题!首先得注意你之前用的Descendants()是Linq to XML(XDocument类)里的方法,而题目要求只能用XmlDocument,所以得换用XmlDocument自带的DOM操作方法才行。

要选中和CreationDateTime的Name节点同级的Value节点,核心思路是先定位到包含<Name>CreationDateTime</Name>的<Attribute>父节点,再在这个父节点下找到对应的Value子节点。这里有两种常用的实现方式:

方法一:遍历Attribute节点逐一判断

这种方式逻辑清晰,适合需要额外处理其他节点的场景:

// 初始化XmlDocument并加载XML内容
XmlDocument xmlDoc = new XmlDocument();
xmlDoc.LoadXml(@"你的XML字符串"); // 或者用xmlDoc.Load("文件路径")加载本地文件

// 获取所有<Attribute>节点
XmlNodeList attributeNodes = xmlDoc.SelectNodes("//Attribute");

foreach (XmlNode attributeNode in attributeNodes)
{
    // 找到当前Attribute下的Name子节点
    XmlNode nameNode = attributeNode.SelectSingleNode("Name");
    if (nameNode != null && nameNode.InnerText.Trim() == "CreationDateTime")
    {
        // 找到同级的Value节点并移除
        XmlNode valueNode = attributeNode.SelectSingleNode("Value");
        if (valueNode != null)
        {
            attributeNode.RemoveChild(valueNode);
        }
    }
}

// 保存修改后的XML
xmlDoc.Save("修改后的文件路径");

方法二:用XPath直接定位目标Value节点

如果逻辑简单,直接用XPath一步到位更简洁:

XmlDocument xmlDoc = new XmlDocument();
xmlDoc.LoadXml(@"你的XML字符串");

// 用XPath直接定位到包含Name为CreationDateTime的Attribute下的Value节点
XmlNode targetValueNode = xmlDoc.SelectSingleNode("//Attribute[Name='CreationDateTime']/Value");

if (targetValueNode != null)
{
    // 通过父节点移除Value节点
    targetValueNode.ParentNode.RemoveChild(targetValueNode);
}

xmlDoc.Save("修改后的文件路径");

关键说明:

  • //Attribute表示匹配XML中所有层级的<Attribute>节点;
  • Attribute[Name='CreationDateTime']是筛选条件,只保留子节点Name的文本为CreationDateTime的Attribute;
  • 找到目标Value节点后,必须通过它的父节点调用RemoveChild来移除,因为XmlNode本身没有直接的Remove方法。

内容的提问来源于stack exchange,提问作者Marcer

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 03:39:33