C# 如何获取xml节点的父节点和兄弟节点

来源:这里教程网 时间:2026-02-21 17:29:26 作者:

在 C# 中操作 XML 时,可以使用 System.Xml 命名空间中的类(如

XmlDocument
XDocument
)来获取节点的父节点和兄弟节点。下面分别介绍如何使用这两种方式实现。

使用 XmlDocument 获取父节点和兄弟节点

XmlDocument 是传统的 DOM 模型方式,适合对 XML 进行灵活操作。

示例 XML:

<Root>
  <Parent>
    <Child1>内容1</Child1>
    <Child2>内容2</Child2>
    <Child3>内容3</Child3>
  </Parent>
</Root>

假设我们要操作

Child2
节点,获取其父节点和兄弟节点:

代码示例:

using System;
using System.Xml;
<p>class Program
{
static void Main()
{
string xml = @"
<Root>
<Parent>
<Child1>内容1</Child1>
<Child2>内容2</Child2>
<Child3>内容3</Child3>
</Parent>
</Root>";</p><pre class="brush:php;toolbar:false;">    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;
<p>class Program
{
static void Main()
{
string xml = @"
<Root>
<Parent>
<Child1>内容1</Child1>
<Child2>内容2</Child2>
<Child3>内容3</Child3>
</Parent>
</Root>";</p><pre class="brush:php;toolbar:false;">    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
更适合复杂修改或兼容老系统。

基本上就这些。根据你的项目需求选择合适的方法即可。

相关推荐