优先选 XElement,新项目起步直接使用;需精细控制 DOM、兼容老系统或满足严格格式要求时选 XmlNode。两者可稳定互转,实际项目常混合使用。
选 XmlNode 还是 XElement,关键看你的使用场景和开发目标,不是哪个“更好”,而是哪个更合适。
XmlDocument + XmlNode 是 .NET 早期就有的 DOM 模型,完全遵循 W3C 规范。如果你要:
preceding-sibling::、ancestor-or-self::)XmlNode 的 API(比如某些 Web Service 客户端)XElement 是 LINQ to XML 的核心,语法简洁、API 更符合现代 C# 风格。适合:
doc.Descendants("book").Where(x => (int?)x.Element("price") > 100))XElement.Parse(jsonString.ToXElement()) 类思路常见)new XElement("user", new XAttribute("id", 123), "Alice") 比手动 CreateElement + SetAttribute 直观得多)实际项目中经常混合使用。比如用 XElement 快速生成结构,再转成 XmlNode 交给某个老组件处理;或者用 XmlDocument.Load() 读取原始 XML,再用 XDocument.Load(xmlNode.CreateReader()).Root 转成 XElement 做后续加工。
转换方法很稳定:
XDocu
ment.Load(node.CreateReader()).Root
new XmlDocument().ReadNode(element.CreateReader())(注意返回的是新 XmlDocument,需取 .DocumentElement 或遍历获取目标节点)除非有明确的合规性、互操作性或历史约束,否则从 XElement 开始更省力。它不比 XmlNode 功能少,只是抽象层级更高、默认行为更“聪明”。而 XmlNode 不会消失,.NET 8/9 依然完整支持,该用的时候照用就行。