XmlReader认为所有元素都是EndElements

时间:2012-08-04 01:07:15

标签: c# xml stream

        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在调试器中(它看起来是正确的):

http://pastebin.com/8Uj2GwSB

为什么XmlReader认为所有节点都是EndElements?我很挣扎,因为这不是我的代码。传给了我......

1 个答案:

答案 0 :(得分:0)

取消注释后,您的StreamReader会将文件指针移动到xml文件的末尾。

//string xmlString = xmlStream.ReadToEnd();

因此,即使您从xmlStream创建XmlReader,也没有剩余的字节可供读取。 如果您想将流读入上面的字符串并重新用于XmlReader,则需要“回放”流。 这可以通过设置Position属性并清除缓冲区来实现,如:

xmlStream.Position = 0;
xmlStream.DiscardBufferedData();

希望这有帮助。