2012-08-04 36 views
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(); 

因此,所有这些情况都不会被输入。如果我评论:XmlReader认为所有元素都是EndElements

//string xmlString = xmlStream.ReadToEnd(); 

随后的xmlString这是在调试器(它看起来是正确的):

http://pastebin.com/8Uj2GwSB

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

+0

看不到你的xml。链接超时。你可以发布你的XML吗? – ZafarYousafi 2012-08-04 02:22:48

回答

0

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

//string xmlString = xmlStream.ReadToEnd(); 

因此,即使您从xmlStream创建XmlReader,也没有任何剩余字节需要读取。 如果您想要将流读入字符串并重新用于XmlReader,则需要“倒回”流。

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

希望这有助于: 这可以通过设置Position属性和清除缓存等来实现。

+0

我知道这是我第一次尝试修复。我用调试器检查了位置,看起来正确。你能看到XML吗?我认为这可能是问题的一部分。 – Dave 2012-08-06 17:15:40

相关问题