在此获取XElement的行号

34
XDocument xdoc = XDocument.Load(file);
IEnumerable<XElement> categories = xdoc.Descendants("Category");
foreach (XElement category in categories)
{
    //get line number for element here...
}
2个回答

78

XElement(实际上是XObject)实现了IXmlLineInfo接口,因此您可以使用它:

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

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

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


5
谢谢提到 LoadOptions.SetLineInfo 方法。 - ghd
6
感谢提到 LoadOptions.SetLineInfo。这使我有些困惑了一段时间。 - PseudoPsyche

36
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 - Martin Schneider
2
个人而言,从C# 6开始,我会这样写: int lineNo = (category as IXmlLineInfo)?.LineNumber ?? -1; - maxp
2
能否获取标签结束的行号? - Mohan Singh

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接