我正在尝试使用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.Load和XNode.ReadFrom都抱怨根级别的无效内容;大概是3。在这两种情况下,都观察到XmlReader当前在"Xml“EndElement上。我希望XmlReader在找到end元素后停止尝试使用底层流中的内容,以便后续对流的读取(例如,三次、四次)将会成功。
当然,我也不希望XmlReader在完成读取后关闭底层流。
发布于 2013-07-28 01:52:01
在this question中找到了答案。必须将XmlReader设置为仅读取片段,而不是文档。
using (var xmlReader = XmlReader.Create(_tcpReader,
new XmlReaderSettings {ConformanceLevel = ConformanceLevel.Fragment}))
{
xmlReader.MoveToContent();
var xmlElement = (XElement) XNode.ReadFrom(xmlReader); // works!
}请注意,在此操作之后,XElement.Load将死亡: reader应该是EOF。
https://stackoverflow.com/questions/17899743
复制相似问题