为何C#使用XDocument移除note节点后出现自闭合notebook标签?
你的代码其实完全正常工作了!
你疑惑的核心点在于XML空节点的两种等价写法——<notebook />和<notebook></notebook>是语义完全一致的,只是序列化时的紧凑格式而已。
拆解你的操作:
- 原XML中
<notebook>节点下包含多个<note>子节点,你调用的代码:
确实精准地移除了所有xd.Element("notebook").Elements("note").Remove();<note>子节点,完全达成了你想要的目标。 - 当
<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
相关产品推荐
相关产品推荐

