StringBuilder returnXml = new StringBuilder();
returnXml.Append("DATE TIME,FUNCTION,TOTAL\n");
String Date = "", Function = "", Total = "";
StreamReader xmlStream = getBlobData(logType, serial, blobStorageCredentials);
//string adf = xmlStream.ReadToEnd();
XmlReader xmlReader = XmlReader.Create(xmlStream);
while (xmlReader.Read())
{
switch (xmlReader.Name)
{
case "OperationType":
if (xmlReader.NodeType == XmlNodeType.Element)
Function = xmlReader.ReadElementContentAsString();
break;
case "TotalCounter":
if (xmlReader.NodeType == XmlNodeType.Element)
Total = xmlReader.ReadElementContentAsString();
break;
case "LogDateTime":
if (xmlReader.NodeType == XmlNodeType.Element)
Date = xmlReader.ReadElementContentAsString();
break;
case "Entries":
if (xmlReader.NodeType == XmlNodeType.EndElement)
{
returnXml.Append(Date);
returnXml.Append(",");
returnXml.Append(Function);
returnXml.Append(",");
returnXml.Append(Total);
returnXml.Append("\n");
}
break;
default:
break;
}
}
return returnXml.ToString();
因此,所有这些案件都没有被输入。如果我发表评论:
//string xmlString = xmlStream.ReadToEnd();
然后xmlString在调试器中(它看起来是正确的):
为什么XmlReader认为所有节点都是EndElements?我很挣扎,因为这不是我的代码。传给了我......
答案 0 :(得分:0)
取消注释后,您的StreamReader会将文件指针移动到xml文件的末尾。
//string xmlString = xmlStream.ReadToEnd();
因此,即使您从xmlStream创建XmlReader,也没有剩余的字节可供读取。 如果您想将流读入上面的字符串并重新用于XmlReader,则需要“回放”流。 这可以通过设置Position属性并清除缓冲区来实现,如:
xmlStream.Position = 0;
xmlStream.DiscardBufferedData();
希望这有帮助。