2011-04-12 17 views

Respuesta

8

La única otra opción que sé of es XDocument.Load(), cuyas sobrecargas aceptan LoadOptions.SetLineInfo. Esto se consumiría de la misma manera que un XmlDocument.

Example

+0

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) –

+0

Pensé que podría ser el caso. Entre los otros dos, creo que preferiría el enfoque 'XPathDocument'. – dahlbyk

+3

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

5

(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); 
+0

Esto es realmente bueno para agregar retrospectivley. He escrito muchos códigos basados ​​en XmlDocument y simplemente agregando este archivo y luego agregando las 3 líneas de código sugeridas, puedo obtener comentarios posicionales útiles del usuario:) ... usted necesita para agregar 'usando ICSharpCode.WpfDesign.XamlDom;' - eso es probablemente deslumbrantemente obvio para los usuarios de C#, pero soy nuevo en C#: o ... +1! –

Cuestiones relacionadas