2010-12-17 17 views
20
XDocument xdoc = XDocument.Load(file); 
IEnumerable<XElement> categories = xdoc.Descendants("Category"); 
foreach (XElement category in categories) 
{ 
    //get line number for element here... 
} 

Respuesta

25
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; 
} 
+0

IXmlLineInfo.LineNumber devuelve '' no int' string' –

+0

En lo personal, desde C# 6, lo escribiría as'int lineno = (categoría que IXmlLineInfo) ?. LineNumber? ? -1; ' – maxp

52

XElement (en realidad XObject) implementa la interfaz IXmlLineInfo, para que pueda usarlo:

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

Tenga en cuenta que la línea de información no siempre está disponible, es necesario llame al método HasLineInfo para verificar si la información está disponible. Puede especificar LoadOptions.SetLineInfo cuando se carga el documento con XDocument.Load

+2

esto debería marcarse como la respuesta, supongo ... –

+0

+1 para una explicación real! – cod3monk3y

+0

acepta esta respuesta ... funciona como magia ... gracias @Thomas – Scorpio