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?我很挣扎,因为这不是我的代码。交给我...
当您取消注释时,StreamReader 会将文件指针移动到 xml 文件的末尾。
//string xmlString = xmlStream.ReadToEnd();
因此,即使您从 xmlStream 创建 XmlReader,您也没有任何字节可供读取。如果要按上述方式将流读入字符串并将其重用于 XmlReader,则需要"倒带"流。这可以通过设置 Position 属性并清除缓冲区来实现,如下所示:
xmlStream.Position = 0;
xmlStream.DiscardBufferedData();
希望这有帮助。