0

0

C# XNode的ReadFrom方法怎么用

幻夢星雲

幻夢星雲

发布时间:2026-02-04 01:09:23

|

194人浏览过

|

来源于php中文网

原创

ReadFrom 是定义在 XElement、XDocument 等具体子类上的静态方法,非 XNode 成员;需传入已定位到起始标签的 XmlReader,只读一个节点且不消耗整个流,适用于流式解析和局部结构提取。

c# xnode的readfrom方法怎么用

ReadFrom 是静态工厂方法,不能直接调用

你写 new XNode().ReadFrom(...)XNode.ReadFrom(...) 会编译失败 —— 因为 ReadFrom 不是 XNode 的成员方法,它实际定义在 XDocumentXElement 等具体子类上,且是静态的。最常见误用就是试图在抽象基类上调用它。

  • XNode 是抽象类,没有 ReadFrom 方法;ReadFrom 只存在于 XElementXDocumentXComment 等具体类型中
  • 它接收 XmlReader(或 TextReader),从当前位置读取一个节点并返回对应实例,**不消耗整个流**,只读一个节点
  • 典型用途:解析 XML 片段、流式读取嵌套结构、与 XmlReader.ReadSubtree() 配合使用

XElement.ReadFrom 最常用,但要注意 reader 位置

绝大多数场景下你要的是 XElement.ReadFrom,它从 XmlReader 当前节点开始读取一个完整元素(含子节点),返回 XElement 实例。关键点在于:reader 必须停在起始标签处(如 ),否则抛出 XmlException

var xml = "Alice";
using var reader = XmlReader.Create(new StringReader(xml));
reader.Read(); // 移动到第一个节点(即 )
var element = XElement.ReadFrom(reader) as XElement;
// 此时 element.Name == "user",element.Attribute("id")?.Value == "123"
  • 如果 reader 停在文本节点、注释或 EOF,ReadFrom 会立即失败
  • 调用后,reader 会自动前进到该元素结束标签之后的位置(即下一个兄弟节点或父节点结束处)
  • 不支持直接传入字符串或字节数组 —— 必须包装成 XmlReaderTextReader

用 ReadFrom 解析 XML 片段时容易漏掉根约束

XML 片段(如 12)没有单一根节点,而 XDocument.ReadFrom 要求合法 XML 文档(有且仅有一个根)。此时必须用 XElement.ReadFrom 逐个读,或手动包装成文档。

优设AI导航
优设AI导航

优设网旗下专业全面的AI工具导航

下载
var fragment = "12";
using var reader = XmlReader.Create(new StringReader(fragment));
reader.Read(); // 到 
var a = XElement.ReadFrom(reader) as XElement; // OK: 1
reader.Read(); // 到 
var b = XElement.ReadFrom(reader) as XElement; // OK: 2
  • 若强行用 XDocument.ReadFrom 读片段,会报错 “Root element is missing”
  • XDocument.LoadXDocument.Parse 更适合完整文档;ReadFrom 是为流式、分步解析设计的
  • 注意 XmlReader 默认不读取 DTD 或 XML 声明,若需处理,创建 reader 时要传 XmlReaderSettings.DtdProcessing = DtdProcessing.Parse

替代方案:Parse 更简单,ReadFrom 适合流式控制

除非你在处理大 XML 流、需要跳过某些节点、或配合 XmlReader.ReadSubtree() 提取局部结构,否则直接用 XElement.Parse(string)XDocument.Load(stream) 更直观、容错更强。

  • XElement.Parse() 接收字符串,自动处理编码、空白、BOM,且对单根片段更宽容
  • ReadFrom 的核心价值在于:和底层 XmlReader 绑定,能精确控制读取边界,避免一次性加载全部内容到内存
  • 调试时最容易卡在 reader.Read() 没调用就直接传给 ReadFrom —— 它不会帮你跳过空白或声明,必须手动定位到目标节点
真正要用好 ReadFrom,得先想清楚:你是不是非得用 XmlReader?是不是必须逐节点控制?如果不是,大概率该换 ParseLoad

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
string转int
string转int

在编程中,我们经常会遇到需要将字符串(str)转换为整数(int)的情况。这可能是因为我们需要对字符串进行数值计算,或者需要将用户输入的字符串转换为整数进行处理。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

543

2023.08.02

string转int
string转int

在编程中,我们经常会遇到需要将字符串(str)转换为整数(int)的情况。这可能是因为我们需要对字符串进行数值计算,或者需要将用户输入的字符串转换为整数进行处理。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

543

2023.08.02

pdf怎么转换成xml格式
pdf怎么转换成xml格式

将 pdf 转换为 xml 的方法:1. 使用在线转换器;2. 使用桌面软件(如 adobe acrobat、itext);3. 使用命令行工具(如 pdftoxml)。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

1909

2024.04.01

xml怎么变成word
xml怎么变成word

步骤:1. 导入 xml 文件;2. 选择 xml 结构;3. 映射 xml 元素到 word 元素;4. 生成 word 文档。提示:确保 xml 文件结构良好,并预览 word 文档以验证转换是否成功。想了解更多xml的相关内容,可以阅读本专题下面的文章。

2095

2024.08.01

xml是什么格式的文件
xml是什么格式的文件

xml是一种纯文本格式的文件。xml指的是可扩展标记语言,标准通用标记语言的子集,是一种用于标记电子文件使其具有结构性的标记语言。想了解更多相关的内容,可阅读本专题下面的相关文章。

1094

2024.11.28

js 字符串转数组
js 字符串转数组

js字符串转数组的方法:1、使用“split()”方法;2、使用“Array.from()”方法;3、使用for循环遍历;4、使用“Array.split()”方法。本专题为大家提供js字符串转数组的相关的文章、下载、课程内容,供大家免费下载体验。

381

2023.08.03

js截取字符串的方法
js截取字符串的方法

js截取字符串的方法有substring()方法、substr()方法、slice()方法、split()方法和slice()方法。本专题为大家提供字符串相关的文章、下载、课程内容,供大家免费下载体验。

213

2023.09.04

java基础知识汇总
java基础知识汇总

java基础知识有Java的历史和特点、Java的开发环境、Java的基本数据类型、变量和常量、运算符和表达式、控制语句、数组和字符串等等知识点。想要知道更多关于java基础知识的朋友,请阅读本专题下面的的有关文章,欢迎大家来php中文网学习。

1506

2023.10.24

全国统一发票查询平台入口合集
全国统一发票查询平台入口合集

本专题整合了全国统一发票查询入口地址合集,阅读专题下面的文章了解更多详细入口。

19

2026.02.03

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
HTML5/CSS3/JavaScript/ES6入门课程
HTML5/CSS3/JavaScript/ES6入门课程

共102课时 | 6.9万人学习

前端基础到实战(HTML5+CSS3+ES6+NPM)
前端基础到实战(HTML5+CSS3+ES6+NPM)

共162课时 | 19.3万人学习

第二十二期_前端开发
第二十二期_前端开发

共119课时 | 12.6万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

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