System.Xml.XmlReaderの現在の行番号を取得する方法を知っている人はいますか?私はファイル内でどこにXML要素があるのかを記録しようとしています。System.Xml.XmlReader(C#&.Net)の現在の行番号
答えて
がXmlReader
でサポートされているIXmlLineInfo
インタフェースを利用してください:
IXmlLineInfo xmlInfo = (IXmlLineInfo)reader;
int lineNumber = xmlInfo.LineNumber;
がIXmlLineInfo
インターフェイスを拡張し、このためのドキュメントはかなり悪いです。
1)System.Xml.XmlReader
は抽象的なものなので、このインスタンスを扱うことは決してありません。そのため、実装されていないという事実LineNumber
とLinePosition
(私たちは気にものです):System.Xml.IXmlLineInfo
インタフェースは2つのプロパティを提供します)
2(それがなかったならば、それは:)すべてがちょうどその少し簡単になるだろう、が)IXmlLineInfo
は、大規模に関してれていませんプラス方法:HasLineInfo()
、ドキュメントに従って、インプリメンターがlineinfoを返すことができるかどうかを知らせます。 System.Xml.XmlReader
の文書化継ぐの
3)、我々は持っている:
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.
は、上記のリストを見ると、XmlDictionaryReader
は内部的に使用されようとしているあなたが合格したら、XmlNodeReader
が使用されようとしています(すでに解析されていて、元の文書からはまだ解かれている)ノード(IXmlLineInfo
を実装しているXmlTextReader
とXmlValidtingReader
)は、ドキュメントを読み込んでいるときに使用されます。ですから、あなたの位置情報を与えることが可能であるか、または有用であれば、フレームワークはそうするでしょう。
言われているように、ドキュメントは非常に軽いと思われます。ただこれを行った、私は(_xrが未知の具体的な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() + ")";
}
、_xrの種類がされて終わりますから継承しますが、System.Xml.XmlValidatingReader
またはSystem.Xml.XmlTextReader
を継承しないSystem.Xml.XsdValidatingReader
(それについての幸運な発見文書!)したがって、おそらく上記のようなアプローチを使用することが賢明でしょう。
- 1. サブラインの現在の行番号
- 2. ページ番号:ハイライト現在の番号ボタン
- 3. DAX - 現在の行番号を取得
- 4. アクセス現在のリビジョン番号
- 5. Jmeter現在のスレッド番号?
- 6. itextsharp c#.netのページ番号
- 7. c#System.Xml.XmlReader ReadInnerXml()
- 8. 現在のスプリント番号のユーザーストーリー
- 9. Vimの現在の行番号の整列
- 10. テキストエリアの現在の行と列番号を表示
- 11. C番号バイト表現
- 12. 動的に現在の行番号を取得
- 13. netbeansエディタで現在の行番号を取得する方法
- 14. 現在の行番号を取得する方法は?
- 15. なぜ現在のフレーム番号が現在のページ番号と等しくないのですか?
- 16. C#テーブルの行番号
- 17. VI正規表現 - 現在の行番号を使用して置換する
- 18. C#.netでテキストファイルの現在の行を削除するには?
- 19. 現行リビジョン番号のMercurialアップデートソースコード
- 20. objective-cの現在の週の番号を取得するには?
- 21. c#WPFのリッチテキストボックスの行番号と列番号
- 22. .NETたStackFrameと現在の行/列
- 23. 銀行口座番号と銀行振替番号の正規表現
- 24. コード実行時に現在の行番号を取得する方法はありますか? C#
- 25. UIApplication sharedApplication tel:現在の通話に番号を追加する(objective-c)
- 26. C%xでプログラミング番号を表現
- 27. laravelの現在の行番号またはセルインデックスを取得する方法
- 28. jqGridでの現在のページ番号の検索
- 29. OpenCVでの現在のフレーム番号の取得
- 30. のDrupal 8つのビューテンプレート:取得現在のページ番号
悪い習慣のようです。 XmlReaderはIXmlLineInfoを継承しないため、この抽象クラスの実装はインターフェイスを実装しない可能性があります。インタフェースのサポートのチェックが必要です。 – SerG
IXmlLineInfo xmlInfo = readerをIXmlLineInfoとして使用してください。この良いコードの練習。 @shuvra – Shuvra