0

xml ファイルを読み取ろうとすると、2 回読み取られ、そのようなエラーを修正する方法がわかりません。ある種のループができると思いましたが、まだ失われています。何か助けていただければ幸いです。- xml ファイルは正しく書き込みますが、読み取ると重複が発生します。

String workingDir = Directory.GetCurrentDirectory();
XmlTextReader textReader = new XmlTextReader(workingDir + @"\xmldoc.xml");

Console.WriteLine("BaseURI:" + textReader.BaseURI);
textReader.Read();

while (textReader.Read())
{
    if (textReader.Name == "test")
    {

        textReader.Read();
        XmlNodeType nType = textReader.NodeType;

        if (nType == XmlNodeType.Text)
        {
            //   label.Text = textReader.Value.ToString();
            Label l = new Label();
            System.Drawing.Point l1 = new System.Drawing.Point(15, 13 + a);
            l.Location = l1;
            l.Text = textReader.Value.ToString();

            a += 20;
        }
4

2 に答える 2

0

一部のエントリが 2 回読まれていると考える理由は何ですか? その場合は、このメソッドが 2 回呼び出されていないかどうかも確認してください (Visual Studio で Shift + F12 を押して使用法を確認してください)。また、ここで結合したコードは完全ではないようです (変数 'a' の宣言がありません)。if (textReader.Name == "test")同じ操作を行う の下で実行されるコードがありますか?

于 2012-06-02T21:29:20.083 に答える
0

あなたが本当に何をしようとしているのか、XML が見えないのかわかりませんが、おおよその方法は次のとおりです。

ノート:

  1. 私はXmlReaderを使用しています<-より良いIMHO(基本クラスなので、ワッフルが少なくなります)
  2. 既に文字列型であるため、ToString() なしで「reader.Value」を使用しています。
  3. よりクリーンだと思うので、スイッチに変更しましたが、XmlNodeTypes がたくさんあり、if/else をあまり必要としません!!!

コード:

        XmlReader reader = XmlReader.Create("books.xml");
        while (reader.Read())
        {
            switch (reader.NodeType)
            {
                case XmlNodeType.Element: // The node is an element.
                    //DO NOTHING
                    break;
                case XmlNodeType.Text: //Display the text in each element.
                    //label.Text = reader.Value;
                    Label l = new Label();
                    System.Drawing.Point l1 = new System.Drawing.Point(15, 13 + a);
                    l.Location = l1;
                    l.Text = reader.Value;
                    a += 20;
                    break;
                case XmlNodeType.EndElement: //Display the end of the element.
                    //DO NOTHING
                    break;
            }
        }
于 2012-06-02T20:06:31.993 に答える