0

次のような tcp ストリームからコンテンツを消費しようとしています。

1
2
<Xml att='value'>
    <Child> ... </Child>
</Xml>
3
4

次のようなコードを使用します。

var one = Convert.ToInt32(_tcpReader.ReadLine());  // ok
var two = Convert.ToInt32(_tcpReader.ReadLine());  // ok

using (var xmlReader = XmlReader.Create(_tcpReader))
{
    xmlReader.MoveToContent();
    var xmlElement = XElement.Load(xmlReader);  // dies
    //(XElement) XNode.ReadFrom(xmlReader);  // also dies
}

var three = Convert.ToInt32(_tcpReader.ReadLine());
var four = Convert.ToInt32(_tcpReader.ReadLine());

問題は、 と の両方XElement.LoadXNode.ReadFromルート レベルで無効なコンテンツについて文句を言うことです。どちらの場合も、XmlReader は現在 "Xml" EndElement にあることがわかります。ストリームからの後続の読み取り (つまり、3、4) が​​成功するように、XmlReader が終了要素を見つけた後、基になるストリームからコンテンツを消費しようとするのを停止する必要があります。

また、もちろん、XmlReader が読み取りを終了した後で基になるストリームを閉じることは望ましくありません。

4

1 に答える 1