答案:在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)来获取节点的父节点和兄弟节点。下面分别介绍如何使用这两种方式实现。
示例 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;"><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
}}
代码示例:
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;"><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 更适合复杂修改或兼容老系统。基本上就这些。根据你的项目需求选择合适的方法即可。
以上就是C# 如何获取xml节点的父节点和兄弟节点的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号