无法引用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
相关产品推荐
相关产品推荐

