0
        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?我很挣扎,因为这不是我的代码。交给我了...

4

1 回答 1

0

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

//string xmlString = xmlStream.ReadToEnd();

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

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

希望这可以帮助。

于 2012-08-04T04:54:55.667 回答