XmlReader によって検査中のノードのストリーム内の現在の位置を取得する方法はありますか?
XmlReader を使用してドキュメントを解析し、特定の要素の位置を保存して、後でそれらを検索できるようにしたいと思います。
補遺:
WPF コントロールによって生成された Xaml を取得しています。Xaml は頻繁に変更されるべきではありません。Xaml には、アイテムを置き換える必要があるプレースホルダーがあり、ループすることもあります。変換よりもコードで行う方が簡単かもしれないと思いました (これについては間違っているかもしれません)。私の考えは、置き換える必要があるものとその場所の単純なデータ構造に解析し、StringBuilder を使用して 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 でテスト済みですが、他のバージョンでも動作するはずです。