XmlReader 认为所有元素都是 EndElements

本文关键字:EndElements 元素 XmlReader | 更新日期: 2024-10-22 15:35:28

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

XmlReader 认为所有元素都是 EndElements

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

//string xmlString = xmlStream.ReadToEnd();

因此,即使您从 xmlStream 创建 XmlReader,您也没有任何字节可供读取。如果要按上述方式将流读入字符串并将其重用于 XmlReader,则需要"倒带"流。这可以通过设置 Position 属性并清除缓冲区来实现,如下所示:

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

希望这有帮助。