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

risposta

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 restituisce '' non int' STRING' –

+0

Personalmente, da C# 6, vorrei scriverlo as'int LINENO = (categoria IXmlLineInfo) ?. LineNumber? ? -1; ' – maxp

52

XElement (in realtà XObject) implementa l'interfaccia IXmlLineInfo, in modo da poter utilizzare:

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

nota che la linea le informazioni non è sempre disponibile, è necessario chiamare il metodo HasLineInfo per verificare se le informazioni sono disponibili. È possibile specificare LoadOptions.SetLineInfo quando si carica il documento con XDocument.Load

+2

questo dovrebbe essere contrassegnato come risposta, immagino ... –

+0

+1 per una spiegazione reale! – cod3monk3y

+0

accetta questa risposta .... funziona come per magia .. grazie @Thomas – Scorpio