Est-ce que quelqu'un sait comment je peux obtenir le numéro de ligne en cours d'un System.Xml.XmlReader? J'essaie d'enregistrer où dans un fichier je trouve des éléments Xml.Numéro de ligne actuel d'un System.Xml.XmlReader (C# & .Net)
Répondre
Profitez de l'interface IXmlLineInfo
pris en charge par un XmlReader
:
IXmlLineInfo xmlInfo = (IXmlLineInfo)reader;
int lineNumber = xmlInfo.LineNumber;
L'expansion de l'interface IXmlLineInfo
, la documentation de c'est assez mauvaise; de faire un peu de creuser, je peux vous dire ce qui suit:
1) System.Xml.XmlReader
est abstrait, donc vous n'allez jamais avoir affaire à une instance de ce, en tant que tel, le fait qu'il ne met pas en œuvre IXmlLineInfo
est pas massivement en ce qui concerne (bien que, si elle le faisait, il serait tout simplement faire un peu plus facile :))
2) L'interface System.Xml.IXmlLineInfo
fournit deux propriétés: LineNumber
et LinePosition
(qui sont les choses qui nous intéressent) , plus une méthode: HasLineInfo()
qui, selon la documentation, vous permettra de savoir si un implémenteur peut retourner le lineinfo.
3) Parmi les héritiers documentés de System.Xml.XmlReader
, nous avons:
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.
En regardant la liste ci-dessus, la XmlDictionaryReader
va être utilisé en interne, le XmlNodeReader
va être utilisé lorsque vous avez passé dans un noeud à lire (qui, après avoir été analysé, est déjà détaché de son document source), les XmlTextReader
et XmlValidtingReader
(tous deux implémentant IXmlLineInfo
), seront utilisés lorsque vous lisez un document. Donc, le plus long et le plus court semble être que s'il est possible ou utile de vous donner des informations de position, le cadre le fera.
Cela étant dit, la documentation semble être très légère. Ayant tout juste fait cela, je fini par faire (avec _xr étant une mise en œuvre concrète inconnue 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() + ")";
}
Avec tout cela étant dit, quand je lance en fait le code ci-dessus, le type de _xr finit par être System.Xml.XsdValidatingReader
(bonne chance de trouver de la documentation à ce sujet!), Qui hérite de System.Xml.XmlReader
, mais n'hérite pas de System.Xml.XmlValidatingReader
ou System.Xml.XmlTextReader
. En tant que tel, il est probablement sage d'utiliser une approche comme celle ci-dessus.
- 1. VI Expressions régulières - Remplacement en utilisant le numéro de ligne actuel
- 2. django en ligne numéro
- 3. Obtenir le numéro de révision actuel dans Subclipse?
- 4. Gridview: Numéro de ligne pour la grille interne
- 5. Numéro de version d'une dll dans .NET
- 6. Dans Vim, existe-t-il un moyen de copier le numéro de ligne actuel dans un tampon?
- 7. Impossible d'obtenir le numéro de ligne de l'exception dans l'application dot net
- 8. Afficher le numéro de ligne dans la gestion des exceptions
- 9. Obtenir le numéro de ligne jsp réel à partir d'un numéro de ligne de trace de la pile?
- 10. symbole privé chargé mais aucun numéro de ligne affiché?
- 11. .Net - Relever le débit interface réseau actuel
- 12. Obtention de NetworkCredential pour l'utilisateur actuel (C#)
- 13. ASP.net C# numéro de tableau magique
- 14. Hdd Numéro de série
- 15. Afficher le numéro de ligne dans la zone de texte enrichi C#
- 16. Comment trouver les valeurs de crête/numéro de ligne?
- 17. Constante de numéro de ligne dans Actionscript 3.0?
- 18. Obtention du numéro de ligne de pdb en mode édition
- 19. Flex DataGrid avec la colonne de numéro de ligne
- 20. Comment capturer un numéro de téléphone
- 21. Rembourrage de ligne .NET ListView
- 22. Mettre le numéro de build actuel de la configuration 'release' dans la configuration 'nightly build'?
- 23. Définition du numéro de ligne à une variable dans Emacs
- 24. Obtention du numéro de ligne dans un DataGridView
- 25. Comment obtenir le numéro de ligne en utilisant le scanner
- 26. pagination externe displaytag/tri et obtenir vrai numéro de ligne
- 27. Pour obtenir le numéro de ligne dans gridview
- 28. Numéro de ligne LINQ-To-SQL supérieur à
- 29. Visual Studio 2008 - saut au raccourci du numéro de ligne
- 30. Récupère la ligne précédente et la ligne suivante de l'ID actuel
Cela ressemble à une mauvaise pratique. Comme XmlReader n'hérite pas IXmlLineInfo, les implémentations de cette classe abstraite ne peuvent pas implémenter l'interface. Une vérification du support de l'interface est nécessaire. – SerG
Veuillez utiliser IXmlLineInfo xmlInfo = reader comme IXmlLineInfo; Ce bon code pratique. @shuvra – Shuvra