C#如何使用XmlNodeReader读取XML片段

畫卷琴夢
发布: 2025-12-22 10:24:08
原创
553人浏览过
XmlNodeReader 是 .NET 中轻量级只进 XML 片段读取器,基于已有 XmlNode 构建虚拟流,适用于局部内容提取;需传入有效 XmlNode(如 SelectSingleNode 结果),遍历其子树,但不支持向上访问、DTD、命名空间前缀解析及部分便捷方法,.NET Core+ 推荐优先使用 LINQ to XML。

c#如何使用xmlnodereader读取xml片段

XmlNodeReader 是 .NET 中用于从 XmlNode(如 XmlElementXmlDocument)读取 XML 数据的轻量级只进读取器,适合处理 XML 片段(即非完整文档的节点子树)。它不解析整个文档,而是基于已有节点构建一个“虚拟流”,非常适合从已有 XML 结构中提取局部内容。

准备一个 XML 片段节点

要使用 XmlNodeReader,必须先有一个有效的 XmlNode 对象,比如从 XmlDocument 中选取的子节点:

XmlDocument doc = new XmlDocument();
doc.LoadXml(@"
<root>
  <person id="1">
    <name>张三</name>
    <age>28</age>
  </person>
  <person id="2">
    <name>李四</name>
    <age>32</age>
  </person>
</root>");

// 提取第一个 person 元素作为片段
XmlNode personNode = doc.SelectSingleNode("/root/person[1]");
登录后复制

用 XmlNodeReader 读取该片段

personNode 传入 XmlNodeReader 构造函数,然后像使用 XmlReader 一样遍历:

using (XmlNodeReader reader = new XmlNodeReader(personNode))
{
    while (reader.Read())
    {
        switch (reader.NodeType)
        {
            case XmlNodeType.Element:
                Console.WriteLine($"元素: {reader.Name}");
                if (reader.HasAttributes)
                    Console.WriteLine($"  属性: id={reader.GetAttribute("id")}");
                break;
            case XmlNodeType.Text:
                Console.WriteLine($"文本: {reader.Value.Trim()}");
                break;
        }
    }
}
登录后复制

输出示例:

Videoleap
Videoleap

Videoleap是一个一体化的视频编辑平台

Videoleap 139
查看详情 Videoleap
元素: person
  属性: id=1
元素: name
文本: 张三
元素: age
文本: 28
登录后复制

注意关键限制和行为

  • XmlNodeReader 只能读取节点及其后代,不能向上访问父节点或兄弟节点
  • 它不会验证 XML 格式,也不支持 DTD、命名空间前缀解析等高级功能(如 XmlReader.Create 配置的选项大多不生效)
  • 读取时节点树必须保持有效——若在读取过程中修改了源 XmlNode,行为未定义,可能抛异常
  • 不支持 ReadElementContentAsString() 等便捷方法,需手动组合 ReadStartElement + ReadContentAsString

替代建议:更现代的写法

在 .NET Core / .NET 5+ 中,推荐优先使用 LINQ to XML 处理片段,代码更简洁安全:

XDocument xdoc = XDocument.Parse(doc.OuterXml);
var person = xdoc.Root?.Elements("person").First();
string name = person?.Element("name")?.Value; // "张三"
int age = int.Parse(person?.Element("age")?.Value ?? "0");
登录后复制

只有在需要兼容旧框架、或必须复用现有 XmlReader 处理逻辑时,才需使用 XmlNodeReader

以上就是C#如何使用XmlNodeReader读取XML片段的详细内容,更多请关注php中文网其它相关文章!

最佳 Windows 性能的顶级免费优化软件
最佳 Windows 性能的顶级免费优化软件

每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。

下载
来源:php中文网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
开源免费商场系统广告
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号