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 に答える