在此处获取 XElement 的行号

Posted

技术标签:

【中文标题】在此处获取 XElement 的行号【英文标题】:get line number for XElement here 【发布时间】:2011-05-27 03:21:53 【问题描述】:
XDocument xdoc = XDocument.Load(file);
IEnumerable<XElement> categories = xdoc.Descendants("Category");
foreach (XElement category in categories)

    //get line number for element here...

【问题讨论】:

【参考方案1】:

XElement(实际上是XObject)实现了IXmlLineInfo接口,所以可以使用:

IXmlLineInfo info = category;
int lineNumber = info.LineNumber;

请注意,线路信息并不总是可用,您需要调用HasLineInfo 方法来检查信息是否可用。使用XDocument.Load加载文档时可以指定LoadOptions.SetLineInfo

【讨论】:

感谢您提及LoadOptions.SetLineInfo 方法。 感谢提及LoadOptions.SetLineInfo。这让我有点不知所措。【参考方案2】:
XDocument xdoc = XDocument.Load(file, LoadOptions.SetLineInfo);
IEnumerable<XElement> categories = xdoc.Descendants("Category");
foreach (XElement category in categories)

    //get line number for element here...
    string lineNumber = ((IXmlLineInfo)category).HasLineInfo() ? ((IXmlLineInfo)category).LineNumber : -1;

【讨论】:

IXmlLineInfo.LineNumber 返回 int 而不是 string 就个人而言,从 C# 6 开始,我会写成int lineNo = (category as IXmlLineInfo)?.LineNumber ?? -1; 能否获取到标签结束的行号?

以上是关于在此处获取 XElement 的行号的主要内容,如果未能解决你的问题,请参考以下文章

XElement 的子级

如何从XElement获取标签

如何确定 XElement.Elements() 是不是包含具有特定名称的节点?

c# Elements of elements using XElement

使用动态特性读取 XML 结构

如何将带有 xml 后代的 XElement 导入 SQL Server