-1

こんにちは私の目的は、xmlファイルが存在しない場合は新しいxmlドキュメントを書き込み、存在する場合はxmlファイルに要素を追加できるようにすることです。問題は、ifがelse if()ステートメントの後に「xwriterは現在のコンテキストに存在しません」というエラーを表示することです。ありがとう

これまで私はこれを試しましたが、機能しません。

     private void button1(object sender, EventArgs e)
    {

        if (!File.Exists("doc.xml"))
        {
            XmlTextWriter xwriter = new XmlTextWriter("doc.xml", Encoding.UTF8);
            XmlWriterSettings settings = new XmlWriterSettings();
        }

        else if (File.Exists("doc.xml"))
        {
            xwriter.Formatting = Formatting.Indented;
            xwriter.WriteStartDocument();
            xwriter.WriteStartElement("myCourse");
            xwriter.WriteString("Test");
            xwriter.WriteEndElement();
        }

    }
4

2 に答える 2

1

主な問題が 2 つあります

1)elseステートメントは、ステートメントで宣言および作成された変数を使用しようとしていますif。つまり、コードのブランチのelseスコープにローカライズされているため、xwriter は単純に には存在しません。ifステートメントでも使用するには、elseステートメントの前に宣言して、コードのとブランチのif両方で使用できるようにする必要があります。ifelse

2) XML ファイルに追加することはできません。ステートメントの外で xwriter を作成するifと、コードはコンパイルされて実行されますが、elseコード ブロックは xml ファイルの既存の内容を上書きするだけです。

必要に応じてxmlに追加するには、ファイルを開く必要があり、ルート/ドキュメント要素の終了タグが開始する場所を探し、xmlライターを使用して書き込み、終了タグを上書きして新しい有効なxmlを形成します. ファイルを閉じるには、xml ファイルが有効なままになるように、ルート/ドキュメント要素の新しい終了タグを追加する生のテキストを追加する必要があります。

もう 1 つの (あまり効率的ではない) 方法は、ファイルから XML をロードし、既存のコンテンツと新しいデータを書き換えることです。

(ファイルの存在を 2 回確認する必要もありません)

于 2012-04-21T20:43:11.467 に答える
0

変数 xwriter は、最初の if ブロック内でのみ定義されます。2 番目のブロックでも定義するには、グローバル変数にする必要があります。

使用する XmlTextWriter コンストラクターは、xml ファイルが存在する場合はそれを切り捨てるので、Stream パラメーターを受け取るコンストラクターに切り替える必要があることに注意してください。

また、既存のファイルに WriteStartDocument を実行しないでください...

全体として、既存のファイルにデータを段階的に追加する必要がある場合、Xml はあまり適していません。可能であれば、別のファイルに切り替えることを検討してください。

于 2012-04-21T20:42:29.720 に答える