在此处获取 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.Elements() 是不是包含具有特定名称的节点?