新闻中心

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

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

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

在 C# 中操作 XML 时,可以使用 System.Xml 命名空间中的类(如 XmlDocumentXDocument)来获取节点的父节点和兄弟节点。下面分别介绍如何使用这两种方式实现。

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

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

示例 XML:

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

假设我们要操作 Child2 节点,获取其父节点和兄弟节点:

代码示例:

Musho Musho

AI网页设计Figma插件

Musho 76 查看详情 Musho
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 的一部分,导致 PreviousSiblingNextSibling 返回空白文本节点。建议使用 PreviousElementSiblingNextElementSibling(仅限元素)或在 LINQ to XML 中操作 Elements() 避免干扰。
  • XmlDocument 中可使用 PreviousElementSiblingNextElementSibling 直接跳过非元素节点。
  • XDocument 更适合函数式查询,而 XmlDocument 更适合复杂修改或兼容老系统。

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

以上就是C# 如何获取xml节点的父节点和兄弟节点的详细内容,更多请关注其它相关文章!


# 中文网  # 佛山关键词排名外包  # 在线网站推广赚钱是真的吗  # 汽车装潢有哪些网站推广  # 烟草礼盒营销推广的教学视频  # 自贡seo营销公司排名  # 医疗网站优化方案  # 桂林实用的seo策略  # 企业建站seo优化服务  # 如何优化企业新网站排名  # 黄山企业网站推广有哪些  # 解决问题  # c#  # 相关文章  # 适用于  # 推荐使用  # 分片  # 客户端  # 重试  # 更适合  # 多线程  # ai  # node  # xml节点 


相关栏目: 【 科技资讯46185 】 【 网络学院92790


相关推荐: sublime怎么进行远程开发编辑_配置rsub/rmate实现sublime编辑服务器文件  小红书网页版入口链接分享 小红书官网直接进  迅雷下载到U盘速度很慢怎么办_迅雷U盘下载慢优化方法  HTML长属性值处理:表单action路径优化与代码规范应对  qq游戏免费畅玩入口_qq游戏电脑版快速启动  C#使用XPath查询节点时出错? 常见语法错误与调试技巧  J*a实现学校排课程序_面向对象结构化项目示例  俄罗斯搜索引擎Yandex指南 附2025年免登录官网入口  NRF24L01数据传输深度解析:解决大载荷接收异常与分包策略  Win11如何开启讲述人功能 Win11屏幕阅读器(讲述人)开启与关闭【教程】  苹果手机指南针不准怎么校准 传感器校准方法详解【建议收藏】  AO3访问入口汇总 AO3网页版同人作品一键直达  yandex入口引擎手机版 yandex安卓版下载入口  漫蛙网页登录入口 漫蛙漫画官方授权网址  J*a中实现Go语言select通道多路复用机制  C++的std::forward_list怎么用_C++ STL中单向链表容器的特点与应用  C++如何检测键盘输入_C++ _kbhit与_getch函数非阻塞输入  163邮箱登录密码 163邮箱忘记密码找回  魅族20怎样在浏览器开无图省流_iPhone魅族20浏览器开无图省流【流量节省】  批改网学生版PC登录 批改网官网登录系统入口  LINUX的perf命令入门_LINUX官方性能分析工具的使用与解读  C++如何连接MySQL数据库_C++使用Connector/C++操作MySQL数据库教程  蛙漫画网页版全站入口 蛙漫热门作品免费浏览  优酷会员付费后没到账怎么办_优酷会员充值异常及解决方法  将HTML动态表格多行数据保存到Google Sheet的教程  小红书商家版怎样在笔记嵌入商品卡路径_小红书商家版在笔记嵌入商品卡路径【挂载教程】  mysql通配符支持数字匹配吗_mysql通配符能否用于数字匹配的解析  正确连接J*aScript到HTML实现可点击图片与自定义事件处理  ArrayList与LinkedList操作复杂度详解:遍历与修改  印象笔记如何设离线包出差查阅_印象笔记设离线包出差查阅【离线阅读】  J*aScript map 迭代中检测空数组元素的有效方法  UE5.7引擎表现爆炸优化无敌!5090跑4K稳定60FPS  零跑汽车11月交付量达70327台 实现连续9个月正增长  qq游戏手机版下载安装_qq游戏移动端入口  Pygame教程:解决用户输入与游戏状态更新不同步问题  如何在Promise链中优雅地中断后续then执行  Sublime怎么配置Nim语言环境_Sublime Nim代码高亮与补全  在J*a中如何使用Stream.map转换元素_Stream映射操作解析  Python:递归比较文件夹内容并找出特定类型文件的差异  Lar*el如何正确地在控制器和模型之间分配逻辑_Lar*el代码职责分离与架构建议  韩小圈电脑版在线入口_网页版免费登录地址  在Pyomo中实现基于变量的条件约束:Big-M方法详解  支付宝解绑银行卡步骤_支付宝如何解除绑定银行卡  抖音从哪里进入网页版_抖音官方入口链接  React列表渲染与独立状态管理:避免全局状态影响局部更新  steam官方网页快速访问 steam账号注册全流程  Python字典中优雅地迭代剩余元素的方法  iwriter统一登录平台 iwrite账号密码登录页面  Lar*el Excel导入时生成自定义递增ID的策略与实践  优化Django表单:提交验证失败后保留用户输入 

搜索