Weiß jemand, wie ich die aktuelle Zeilennummer eines System.Xml.XmlReader erhalten kann? Ich versuche zu notieren, wo ich in einer Datei Xml-Elemente finde.Aktuelle Zeilennummer von einem System.Xml.XmlReader (C# & .Net)
Antwort
Nutzen Sie die IXmlLineInfo
Schnittstelle von einem XmlReader
unterstützt:
IXmlLineInfo xmlInfo = (IXmlLineInfo)reader;
int lineNumber = xmlInfo.LineNumber;
Aufbauend auf der IXmlLineInfo
Schnittstelle, denn dies ist die Dokumentation ziemlich schlecht ist; von ein bisschen Graben, kann ich Ihnen folgendes sagen:
1) System.Xml.XmlReader
ist abstrakt, so dass Sie nie mit einer Instanz davon zu tun, als solche, die Tatsache, dass es nicht implementieren wird IXmlLineInfo
nicht massiv über
2) Die System.Xml.IXmlLineInfo
Schnittstelle bietet zwei Eigenschaften (obwohl, wenn es so wäre, wäre es alles nur ein bisschen einfacher :) machen): LineNumber
und LinePosition
(das sind die Dinge, die wir kümmern uns um) , plus eine Methode: HasLineInfo()
die, nach der Dokumentation, Sie wissen lassen wird, wenn ein Implementor die Lineinfo zurückgeben kann.
3) Von den dokumentierten Erben System.Xml.XmlReader
, haben wir:
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.
in der obigen Liste der Suche, die XmlDictionaryReader
intern verwendet werden soll, die XmlNodeReader
verwendet werden wird, wenn Sie bestanden haben in einem zu lesenden Knoten (der, nachdem er analysiert wurde, bereits aus seinem Quelldokument entfernt ist), werden XmlTextReader
und XmlValidtingReader
(die beide IXmlLineInfo
implementieren) verwendet, wenn Sie aus einem Dokument lesen. Also, das lange und kurze scheint, dass, wenn es möglich oder nützlich ist, Ihnen Positionsinformationen zu geben, der Rahmen dies tun wird.
Das gesagt, die Dokumentation scheint sehr leicht zu sein. Nachdem dies nur getan, ich am Ende tun (mit _xr eine unbekannte konkrete Umsetzung System.Xml.XmlReader
ist):
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() + ")";
}
Mit all diesem wird gesagt, wenn ich den Code oben tatsächlich ausgeführt werden, endet die Art von _xr bis zu sein System.Xml.XsdValidatingReader
(viel Glück bei der Suche nach Dokumentation!), Die von System.Xml.XmlReader
erbt, aber nicht erbt von System.Xml.XmlValidatingReader
oder System.Xml.XmlTextReader
. Daher ist es wahrscheinlich ratsam, einen Ansatz wie den obigen zu verwenden.
- 1. aktuelle Zeilennummer in Lua
- 2. echo aktuelle Zeilennummer csv php
- 3. Wie bekomme ich die aktuelle Zeilennummer?
- 4. Dynamisch erhalten Sie die aktuelle Zeilennummer
- 5. Wie bekomme ich die aktuelle Zeilennummer in Netbeans Editor
- 6. Get Zeilennummer Fehler in verschleierter Code .net
- 7. Eingabe von einem Joystick mit C#. NET
- 8. C++ Get Total File Zeilennummer
- 9. Wie erhält man die aktuelle Datei- und Zeilennummer in Ruby?
- 10. Methodenname von Zeilennummer
- 11. Erstellen von Verzeichnissen in einem ZipArchiv C# .Net 4.5
- 12. Umzug von einem C# "Programmierer" zu einem. NET "Entwickler"
- 13. Zeilennummer in Stack Trace für .NET-Assembly im Freigabemodus anzeigen
- 14. Gridview: Zeilennummer für Inneres Raster
- 15. Aktuelle OpenHardwareMonitor Beispielcode C#
- 16. Aktuelle/aktive Sicherheitszone einer .NET-Anwendung abrufen?
- 17. Erste aktuelle Kultur Tag-Name in .NET
- 18. Anzeigen von Zeilennummer in Rich-Text-Box C#
- 19. Wo ist die aktuelle C# Spezifikation schon?
- 20. Erhalte die aktuelle Lernrate von einem tf.train.AdamOptimizer
- 21. C# .NET greifen Daten von einem COM-Port
- 22. Schließen einer Anwendung von einem anderen in C# .net
- 23. Portierung von .NET C++ - Standalone auf Mac
- 24. Kombinieren von 3 Arrays nach Zeilennummer
- 25. Erhalte eine beliebige Zeilennummer von std: logic_error
- 26. Call C++ Funktionen von C# /. NET
- 27. Zeilennummer basierend auf Felddaten
- 28. C# /. Net-Äquivalent von NSNotification
- 29. DB2 Massenladevorgang von .Net (C#)?
- 30. Einstellen der aktuellen Zeile des Cursors auf einem .NET TextBox
Sieht aus wie schlechte Praxis. Da XmlReader IXmlLineInfo nicht erbt, implementieren Implementierungen dieser abstrakten Klasse die Schnittstelle möglicherweise nicht. Eine Überprüfung auf Unterstützung der Schnittstelle ist erforderlich. – SerG
Bitte verwenden Sie IXmlLineInfo xmlInfo = reader als IXmlLineInfo; Diese gute Code-Praxis. @shuvra – Shuvra