在这里获取XElement的行号

时间:2010-12-17 13:45:32

标签: c# .net 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...
}

2 个答案:

答案 0 :(得分:60)

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

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

请注意,行信息并非始终可用,您需要调用HasLineInfo方法来检查信息是否可用。使用LoadOptions.SetLineInfo

加载文档时,可以指定XDocument.Load

答案 1 :(得分: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;
}