在这里获取XElement的行号

28 .net c# xml linq-to-xml

XDocument xdoc = XDocument.Load(file);
IEnumerable<XElement> categories = xdoc.Descendants("Category");
foreach (XElement category in categories)
{
    //get line number for element here...
}
Run Code Online (Sandbox Code Playgroud)

Tho*_*que 65

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

IXmlLineInfo info = category;
int lineNumber = info.LineNumber;
Run Code Online (Sandbox Code Playgroud)

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

  • 感谢您提及 `LoadOptions.SetLineInfo` 方法。 (3认同)
  • 感谢提到`LoadOptions.SetLineInfo`.这让我有点沮丧. (2认同)

小智 29

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;
}
Run Code Online (Sandbox Code Playgroud)

  • 就个人而言,从C#6开始,我会把它写成`int lineNo =(类别为IXmlLineInfo)?. LineNumber ?? -1;` (2认同)
  • 是否可以获取标签结束处的行号? (2认同)