XmlReaderから現在の位置を取得する 質問する

XmlReaderから現在の位置を取得する 質問する

XmlReader によって検査中のノードのストリーム内の現在の位置を取得する方法はありますか?

XmlReader を使用してドキュメントを解析し、特定の要素の位置を保存して、後でそれらを検索できるようにしたいと思います。

補遺:

WPF コントロールによって生成された Xaml を取得しています。Xaml は頻繁に変更されるべきではありません。Xaml には、アイテムを置き換える必要があるプレースホルダーがあり、ループすることもあります。変換よりもコードで行う方が簡単かもしれないと思いました (これについては間違っているかもしれません)。私の考えは、置き換える必要があるものとその場所の単純なデータ構造に解析し、S​​tringBuilder を使用して xaml 文字列からチャンクをコピーして最終出力を生成することでした。

ベストアンサー1

Jon Skeet が言うように、XmlTextReader実装されていますIXmlLineInfoが、XmlTextReader以降は非推奨になっており.NET 2.0、質問は についてXmlReaderのみです。私はこの解決策を見つけました:

XmlReader xr = XmlReader.Create( // MSDN recommends to use Create() instead of ctor()
    new StringReader("<some><xml><string><data>"),
    someSettings // furthermore, can't set XmlSettings on XmlTextReader
);
IXmlLineInfo xli = (IXmlLineInfo)xr;

while (xr.Read())
{
    // ... some read actions ...

    // current position in StringReader can be accessed through
    int line = xli.LineNumber;
    int pos  = xli.LinePosition;
}

PS .NET Compact Framework 3.5 でテスト済みですが、他のバージョンでも動作するはずです。

おすすめ記事