|
> これに関して疑問であったのが、Create()はXmlReaderSettingsを指定することができ、
> XmlReaderSettingsには行番号を指定するプロパティがあるにものかかわらず、
> XmlReaderには行番号を保持するメンバもなく、プロパティも存在しないのか?です。
> XmlReaderSettingsを別な要因で扱う場合に有用なのかどうかは詳細を確認していないのですが、
> Create()に関して意味をなさないのかな?と思っています。
XmlReaderSettings.LineNumberOffset の意味を誤解なさっているようです。
ドキュメントの記述もちょっと分かりにくいですけど。
例えば、以下のようなコードで例外メッセージを確認してみて下さい。
// contents 要素が閉じてないので必ず例外が発生します。
string xml = @"<?xml version=""1.0""?>
<root>
<body>
<contents>
</body>
</root>";
TextReader text = new StringReader(xml);
XmlReaderSettings set = new XmlReaderSettings();
set.LineNumberOffset = 100; // コメントアウトしたり
XmlReader reader = XmlReader.Create(text, set);
try {
while (reader.Read());
}
catch (XmlException ex) {
Debug.WriteLine(ex);
}
> Create()では基となるXmlReaderを指定することができますので、
> 適切な形(ReadStateなどは引き継いだ時点でファイル終端になってしまうので)で
> それの状態を引き継いでかつ、
> XmlReaderSettingsを噛み合わせたXmlReaderをCreateしてくれるのかな?と思ってます。。。
前述の通り、XmlReader は非キャッシュ、前方参照専用ですから、
途中まで読み進めた XmlReader を元に Create してもその途中からしか読めませんよ?
最後まで読んだ XmlReader を元にしたなら初回の Read 呼び出しでもう false です。
Validation を追加する時に使うぐらいかしらん?
|