答案:在C#中可通过XmlDocument或XDocument获取XML节点的父节点和兄弟节点。使用XmlDocument时,通过ParentNode、PreviousSibling和NextSibling属性获取对应节点,推荐使用PreviousElementSibling和NextElementSibling避免文本节点干扰;使用XDocument(LINQ to XML)时,通过Parent属性获取父节点,ElementsBeforeSelf()和ElementsAfterSelf()获取前后兄弟节点,Elements()结合Where筛选所有同级兄弟。前者适用于传统DOM操作,后者语法更简洁,适合现代项目。

在 C# 中操作 XML 时,可以使用 System.Xml 命名空间中的类(如 XmlDocument 或 XDocument)来获取节点的父节点和兄弟节点。下面分别介绍如何使用这两种方式实现。
使用 XmlDocument 获取父节点和兄弟节点
XmlDocument 是传统的 DOM 模型方式,适合对 XML 进行灵活操作。示例 XML:
内容1 内容2 内容3
假设我们要操作 Child2 节点,获取其父节点和兄弟节点:
代码示例:
using System; using System.Xml;class Program { static void Main() { string xml = @"
"; 内容1 内容2 内容3 XmlDocument doc = new XmlDocument(); doc.LoadXml(xml); // 找到 Child2 节点 XmlNode child2 = doc.SelectSingleNode("//Child2"); // 获取父节点 XmlNode parentNode = child2.ParentNode; Console.WriteLine("父节点名称: " + parentNode.Name); // 输出: Parent // 获取前一个兄弟节点 XmlNode prevSibling = child2.PreviousSibling; if (prevSibling != null) Console.WriteLine("前一个兄弟节点: " + prevSibling.Name); // Child1 // 获取后一个兄弟节点 XmlNode nextSibling = child2.NextSibling; if (nextSibling != null) Console.WriteLine("后一个兄弟节点: " + nextSibling.Name); // Child3 }}
使用 LINQ to XML (XDocument) 获取父节点和兄弟节点
XDocument 是更现代的方式,语法更简洁,推荐用于新项目。代码示例:
using System; using System.Linq; using System.Xml.Linq;class Program { static void Main() { string xml = @"
"; 内容1 内容2 内容3 XDocument doc = XDocument.Parse(xml); // 找到 Child2 元素 XElement child2 = doc.Descendants("Child2").FirstOrDefault(); if (child2 == null) return; // 获取父节点 XElement parent = child2.Parent; Console.WriteLine("父节点名称: " + parent.Name); // Parent // 获取所有同级兄弟元素(不包括自己) var siblings = parent.Elements().Where(e => e != child2); Console.WriteLine("所有兄弟节点:"); foreach (var sib in siblings) Console.WriteLine(" " + sib.Name); // 获取前一个兄弟 XElement prev = child2.ElementsBeforeSelf().LastOrDefault(); if (prev != null) Console.WriteLine("前一个兄弟: " + prev.Name); // Child1 // 获取后一个兄弟 XElement next = child2.ElementsAfterSelf().FirstOrDefault(); if (next != null) Console.WriteLine("后一个兄弟: " + next.Name); // Child3 }}
注意事项
在处理兄弟节点时需注意:
- 文本节点或换行符可能被解析为
XmlNode的一部分,导致PreviousSibling或NextSibling返回空白文本节点。建议使用PreviousElementSibling和NextElementSibling(仅限元素)或在 LINQ to XML 中操作Elements()避免干扰。 - 在
XmlDocument中可使用PreviousElementSibling和NextElementSibling直接跳过非元素节点。 -
XDocument更适合函数式查询,而XmlDocument更适合复杂修改或兼容老系统。
基本上就这些。根据你的项目需求选择合适的方法即可。










