0

Read()メソッドがいくつかの行をスキップしているように見えるため、XML ファイルを解析しようとすると問題が発生します。まず、XML ファイルは次のとおりです。

  <comments>
    <comment id="e2d6d918-0fbb-4434-9e43-6b028b872867" parentid="00000000-0000-0000-0000-000000000000" approved="True" spam="False" deleted="False">
      <date>2012-06-14 18:40:55</date>
      <author>*content here*</author>
      <email>*content here*</email>
      <country>*content here*</country>
      <ip>*content here*</ip>
      <moderatedby>*content here*</moderatedby>
      <content>*content here*</content>
    </comment>
    <comment id="7f74b8af-73e5-407f-abcb-c3cba5ffc611" parentid="e2d6d918-0fbb-4434-9e43-6b028b872867" approved="True" spam="False" deleted="False">
      <date>2012-06-15 01:59:34</date>
      <author>*content here*</author>
      <email>*content here*</email>
      <country>*content here*</country>
      <ip>*content here*</ip>
      <website>*content here*</website>
      <content>*content here*</content>
    </comment>
  </comments>

そしてコードに:

(私はを使用していますXmlTextReader

            while (reader.Read())
            {
                if (reader.Name == "comment" && reader.NodeType == XmlNodeType.Element)
                {
                    Comment newComment = new Comment();

                    newComment.PostId = postId;

                    reader.MoveToAttribute("deleted");
                    newComment.IsDeleted = Convert.ToBoolean(reader.Value);
                    reader.MoveToAttribute("spam");
                    newComment.IsSpam = Convert.ToBoolean(reader.Value);
                    reader.MoveToAttribute("approved");
                    newComment.IsApproved = Convert.ToBoolean(reader.Value);
                    reader.MoveToAttribute("parentid");
                    newComment.ParentCommentId = new Guid(reader.Value);
                    reader.MoveToAttribute("id");
                    newComment.PostCommentId = new Guid(reader.Value);

                    reader.ReadToFollowing("date");
                    newComment.CommentDate = Convert.ToDateTime(reader.ReadString());

                    reader.ReadToFollowing("author");
                    newComment.Author = reader.ReadString();

                    reader.ReadToFollowing("email");
                    newComment.Email = reader.ReadString();

                    reader.ReadToFollowing("country");
                    newComment.Country = reader.ReadString();

                    reader.ReadToFollowing("ip");
                    newComment.Ip = reader.ReadString();

                    reader.ReadToFollowing("website");
                    newComment.Website = reader.ReadString();

                    //reader.ReadToFollowing("moderatedBy");
                    newComment.ModeratedBy = string.Empty;

                   //reader.ReadToFollowing("avatar");
                    newComment.Avatar = string.Empty;

                    reader.ReadToFollowing("content");
                    newComment.CommentContent = reader.ReadString();

                    comments.Add(newComment);
                }
            }

編集:さらにデバッグを行ったところ、存在しない Web サイト要素を読み取ろうとしていることがわかりました。

4

1 に答える 1

0

問題は、すべてのコメント ノードに存在しない「website」要素を読み込もうとしていたことです。これにより、リーダーは (上記の XML ファイルで 2 番目のコメントに移動して行ったように) 見つけるか、ファイルの最後に到達するまで検索を続けていました。

そのチェックを削除したところ、現在は機能しています。

于 2012-07-30T20:31:14.623 に答える