You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

无法引用System.Xml.Linq.LineInfoAnnotation及XML行信息保留问题咨询

解决XDocument行信息访问与LineInfoAnnotation无法引用的问题

首先,你遇到的System.Xml.Linq.LineInfoAnnotation无法直接引用的问题,本质原因很明确:这个类是.NET框架System.Xml.Linq命名空间下的内部类(internal class),它仅用于框架内部逻辑,并不对外暴露公开访问权限,所以你没办法在自己的代码里直接引用它。

关于你遍历XElement时看到的两个注解,其实是SetLineInfo加载选项触发的正常现象:

  • 第一个就是那个你看到的内部LineInfoAnnotation,它负责存储行号、列号这些实际的行信息数据
  • 另一个通常是System.Xml.Linq.XmlTreeAnnotation,用来维护XML树的内部状态、关联关系等框架级别的数据

那正确获取行信息的方式是什么?完全不需要碰那个内部类,.NET已经提供了公开的IXmlLineInfo接口来安全获取这些数据。你只需要将XElement转换为这个接口即可,示例代码如下:

foreach (var element in xDocument.Descendants())
{
    if (element is IXmlLineInfo lineInfo && lineInfo.HasLineInfo())
    {
        int lineNumber = lineInfo.LineNumber;
        int linePosition = lineInfo.LinePosition;
        // 在这里使用行号、列号信息完成你的业务逻辑
    }
}

额外提醒:别试图通过反射去强行访问LineInfoAnnotation,虽然技术上可能实现,但内部类的结构在.NET不同版本中可能发生变化,会导致你的代码兼容性极差,使用官方提供的IXmlLineInfo接口才是稳定可靠的方案。

内容的提问来源于stack exchange,提问作者Deyan Dimov

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.22 08:30:20