Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 同一流上的多个(顺序)XmlReader实例_C#_Xml_Xmlreader - Fatal编程技术网

C# 同一流上的多个(顺序)XmlReader实例

C# 同一流上的多个(顺序)XmlReader实例,c#,xml,xmlreader,C#,Xml,Xmlreader,我的问题应该比较直截了当: 是否(以任何方式)可以为同一个流按顺序创建多个XmlReader对象,而不需要第一个读卡器在流被释放后将其推进到底 示例代码(请注意,对ReadElement的第二次调用将失败,因为第一个读取器出于任何原因将流推进到末尾): 如果“pure.Net”无法实现这一点,那么是否有其他('Light')Xml解析器库支持这种行为?1。凌乱的道路 如果您能够保存每个序列的长度,可以执行以下操作: int len, i = 0; //len is the length of t

我的问题应该比较直截了当:

是否(以任何方式)可以为同一个流按顺序创建多个XmlReader对象,而不需要第一个读卡器在流被释放后将其推进到底

示例代码(请注意,对ReadElement的第二次调用将失败,因为第一个读取器出于任何原因将流推进到末尾):

如果“pure.Net”无法实现这一点,那么是否有其他('Light')Xml解析器库支持这种行为?

1。凌乱的道路 如果您能够保存每个序列的长度,可以执行以下操作:

int len, i = 0; //len is the length of the interval
byte[] buffer = new byte[0xff];

while (len --> 0)
    buffer[i++] = stream.ReadByte (); //copies the interval
这将分别从中复制一个字节间隔,并将其保存到缓冲区中。然后,您只需将缓冲区分配给一个新的或一个字符串(请参阅重载),就可以使用它

问题是第一次读取操作太贪婪,占用了整个时间间隔

2.原始方式

正如您已经演示的,您可以简单地将流重置回其原始位置(当然,前提是您的流是可查找的)。你如何设想在不寻求帮助的情况下做到这一点?您需要将流内容复制到内存中,然后可以创建所有您喜欢的阅读器。您想解决什么问题?我正在开发一个Xml序列化程序,因为它可以用于网络流等,遗憾的是,查找不是一个选项。此外,向流中写入额外的“内容”以跟踪每个段的起始位置会破坏可读性。该解决方案的问题是,我需要知道xml的每个“位”的长度,我目前正在开发一个xml序列化程序,以及从同一流中读取多个对象的能力(在不破坏Xml可读性的情况下)将是首选,因为这将允许它也用于配置。
int len, i = 0; //len is the length of the interval
byte[] buffer = new byte[0xff];

while (len --> 0)
    buffer[i++] = stream.ReadByte (); //copies the interval