¿Alguien sabe cómo puedo obtener el número de línea actual de un System.Xml.XmlReader? Estoy tratando de registrar en qué parte de un archivo encuentro elementos Xml. ventajaNúmero de línea actual de un System.Xml.XmlReader (C# & .Net)
Respuesta
Toma de la interfaz IXmlLineInfo
apoyado por una XmlReader
:
IXmlLineInfo xmlInfo = (IXmlLineInfo)reader;
int lineNumber = xmlInfo.LineNumber;
Ampliando la interfaz IXmlLineInfo
, la documentación de esto es bastante malo; de hacer un poco de excavación, puedo decirle lo siguiente:
1) System.Xml.XmlReader
es abstracto, por lo que nunca va a tratar con una instancia de esto, como tal, el hecho de que no implementa IXmlLineInfo
no está masivamente relativos a (aunque, si lo hiciera, sería hacer todo sólo un poco más fácil :))
2) La interfaz System.Xml.IXmlLineInfo
proporciona dos propiedades: LineNumber
y LinePosition
(que son las cosas que nos interesan) , más un método: HasLineInfo()
que, de acuerdo con la documentación, le permitirá saber si un implementador puede devolver el lineinfo.
3) De los herederos documentados de System.Xml.XmlReader
, tenemos:
System.Xml.XmlDictionaryReader - abstract, used by WCF for serialization, no IXmlLineInfo
System.Xml.XmlNodeReader - used when reading a node, no IXmlLineInfo
System.Xml.XmlTextReader - used when reading a stream of data, has IXmlLineInfo
System.Xml.XmlValidatingReader - used when reading a stream of data and validating, has IXmlLineInfo.
cuanto a la lista anterior, el XmlDictionaryReader
va a ser utilizado internamente, la XmlNodeReader
va a ser utilizado cuando haya pasado en un nodo que se leerá (que, una vez analizado, ya no está protegido de su documento de origen), se usarán XmlTextReader
y XmlValidtingReader
(ambos implementados IXmlLineInfo
) cuando está leyendo un documento. Por lo tanto, parece que si es posible o útil darle información de posición, el marco lo hará.
Dicho esto, la documentación parece ser muy ligera. Habiendo hecho esto, terminé haciendo (con _xr ser una aplicación concreta desconocido de System.Xml.XmlReader
):
string position = "(unknown)";
if (_xr != null && typeof(System.Xml.IXmlLineInfo).IsInstanceOfType(_xr) &&
((System.Xml.IXmlLineInfo)_xr).HasLineInfo())
{
System.Xml.IXmlLineInfo li = (System.Xml.IXmlLineInfo)_xr;
position = "(" + li.LineNumber.ToString() + "," + li.LinePosition.ToString() + ")";
}
Con todo esto dicho, cuando realmente ejecutar el código anterior, el tipo de _xr termina siendo System.Xml.XsdValidatingReader
(¡buena suerte encontrar documentación sobre eso!), Que hereda de System.Xml.XmlReader
, pero no hereda de System.Xml.XmlValidatingReader
o System.Xml.XmlTextReader
. Como tal, probablemente sea prudente usar un enfoque como el anterior.
- 1. número de línea actual en Lua
- 2. ¿Cómo obtener el número de línea actual?
- 3. ¿Cómo puedo determinar el número de línea actual en JavaScript?
- 4. VI Expresiones regulares - Sustituir usando el número de línea actual
- 5. Resaltando el número de línea actual en vim
- 6. .NET C# Aplicación GUI Línea de comando
- 7. En Vim, ¿hay alguna manera de copiar el número de línea actual en un búfer?
- 8. Mostrar la línea actual y el número de columna para un área de texto
- 9. ¿Cómo se abre el número de línea actual de un archivo usando Perl?
- 10. Obteniendo el número de línea jsp real de un número de línea de rastreo de pila?
- 11. Resalte línea actual de RichTextBox
- 12. Al procesar un archivo, ¿cómo obtengo el número de línea actual?
- 13. ¿Cómo obtener el número de línea de un archivo en C++?
- 14. ¿Número de clases en .NET?
- 15. C moviendo el cursor al principio de la línea actual
- 16. ¿Número de hilo actual de Jmeter?
- 17. número de versión de un archivo DLL en .NET
- 18. Mostrar número de línea en Borland C++ Builder 6 (2002)
- 19. WPF - Número de línea automática para FlowDocument?
- 20. ¿Cómo determino el archivo y el número de línea de un método C# de un archivo de símbolos (.pdb)?
- 21. Mostrar número de memoria intermedia actual
- 22. .NET HTTP POST Method - Número de cookies
- 23. ASP .net ubicación física actual
- 24. número de formato en C#
- 25. Intellij Nueva línea en el atajo de línea actual
- 26. ¿No se muestra el número de línea?
- 27. Asignación de número de línea de Javascript
- 28. Número de línea de falla de segmentación
- 29. Eliminar de la posición actual del cursor a un número de línea dado en el editor vi
- 30. .NET "terminador de línea predeterminado"?
Parece una mala práctica. Como XmlReader no hereda IXmlLineInfo, las implementaciones de esta clase abstracta pueden no implementar la interfaz. Se necesita un control de soporte de la interfaz. – SerG
Utilice IXmlLineInfo xmlInfo = reader como IXmlLineInfo; Esta buena práctica de código. @shuvra – Shuvra