(respuesta Ampliación de @ comentarios de Andy)
No hay está construido en forma de hacerlo usando XmlDocument
(si está utilizando XDocument
, puede utilizar la sobrecarga de XDocument.Load()
que acepta LoadOptions.SetLineInfo
- ve this question).
Si bien no hay manera integrada, puede utilizar la clase PositionXmlDocument
envoltorio de aquí (del proyecto SharpDevelop):
https://github.com/icsharpcode/WpfDesigner/blob/5a994b0ff55b9e8f5c41c4573a4e970406ed2fcd/WpfDesign.XamlDom/Project/PositionXmlDocument.cs
Para usarlo, usted tendrá que utilizar el Load
sobrecarga que acepta un XmlReader
(las otras sobrecargas Load
irán a la clase normal XmlDocument
, que no proporcionará la información del número de línea). Si usted está usando la sobrecarga XmlDocument.Load
que acepta un nombre de archivo, tendrá que cambiar el código de la siguiente manera:
using (var reader = new XmlTextReader(filename))
{
var doc = new PositionXmlDocument();
doc.Load(reader);
}
Ahora, usted debe ser capaz de lanzar cualquier XmlNode
de este documento a un PositionXmlElement
para recuperar el número de línea y columna:
var node = doc.ChildNodes[1];
var elem = (PositionXmlElement) node;
Console.WriteLine("Line: {0}, Position: {1}", elem.LineNumber, elem.LinePosition);
Para .net actual esto sería grandioso ... pero desafortunadamente sigo escribiendo para .net 2.0 de los 80s. (Lo hubiera mencionado en la pregunta, pero no quise salir con la publicación) –
Pensé que podría ser el caso. Entre los otros dos, creo que preferiría el enfoque 'XPathDocument'. – dahlbyk
Siga el enfoque de XmlDocument y mire este código como un contenedor: https://github.com/icsharpcode/SharpDevelop/blob/master/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.XamlDom/Project/PositionXmlDocument.cs – Andy