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

为何C#使用XDocument移除note节点后出现自闭合notebook标签?

你的代码其实完全正常工作了!

你疑惑的核心点在于XML空节点的两种等价写法——<notebook />和<notebook></notebook>是语义完全一致的,只是序列化时的紧凑格式而已。

拆解你的操作:

  1. 原XML中<notebook>节点下包含多个<note>子节点,你调用的代码:
    xd.Element("notebook").Elements("note").Remove();
    
    确实精准地移除了所有<note>子节点,完全达成了你想要的目标。
  2. 当<notebook>节点没有任何子元素时,XML序列化工具会默认用自闭合标签<notebook />来表示空节点,这是XML的标准语法,和完整的<notebook></notebook>没有任何功能差异。

如果想强制输出完整标签对:

如果你希望看到<notebook></notebook>而非自闭合标签,可以在保存XML时调整XmlWriterSettings的配置,关键是设置WriteEmptyElements = false:

var settings = new XmlWriterSettings
{
    Indent = true, // 保留格式化缩进
    WriteEmptyElements = false // 禁用自闭合标签
};

using var writer = XmlWriter.Create("output.xml", settings);
xd.Save(writer);

这样保存后的XML就会显示为:

<?xml version="1.0" encoding="utf-8"?>
<notebook></notebook>

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 06:59:22