【问题标题】:XmlReader thinks all elements are EndElementsXmlReader 认为所有元素都是 EndElements
【发布时间】:2012-08-04 01:07:15
【问题描述】:
        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?我很挣扎,因为这不是我的代码。交给我了……

【问题讨论】:

  • 看不到您的 xml。链接超时。你能在 SO 上发布你的 xml。

标签: c# xml stream


【解决方案1】:

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

//string xmlString = xmlStream.ReadToEnd();

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

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

希望这会有所帮助。

【讨论】:

  • 我知道这一点,这是我第一次尝试修复。我用调试器检查了位置,它看起来是正确的。您能看到 XML 吗?我认为这可能是问题的一部分。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-09-07
  • 1970-01-01
  • 2019-12-22
  • 2016-08-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多