0

こんにちは私は独自のToDoプログラムを作成していますが、ユーザーがToDoアイテムを作成する機能を追加する必要があります。彼らがこれを行うとき、私はリストファイルにXML要素/セクションを追加できる必要があります。

私のXMLファイルは次のようになります。

<?xml version="1.0" encoding="utf-8"?>
<list>
<item>
    <name>Item 1</name>
    <due>Tomorrow</due>
</item>
<item>
    <name>Item 2</name>
    <due>Thursday</due>
</item>
</list>

たとえば、ユーザーが「papers」という名前で期限が「Tomorrow」のアイテムを作成した場合、上記のような別のリスト要素を作成して、</list>タグの前に挿入できるようにする必要があります。

</list>基本的に、特定の位置(タグの前の最後)でXMLファイルに書き込むにはどうすればよいですか?ファイルの最後に移動して1行戻ることは可能ですか?

4

3 に答える 3

1

ファイルの最後に移動して1行戻ることは可能ですか?

確かにそうですが、そうすることは非常に危険です。これは、XMLファイルがどのように記述されているかを前提としています。これも同様に有効なXMLです。

<?xml version="1.0" encoding="utf-8"?>
<list><item><name>Item 1</name><due>Tomorrow</due></item><item><name>Item 2</name><due>Thursday</due></item></list>

今ではもう少し複雑になります。代わりに、XMLパーサーを使用し、XMLファイルを解析し、XMLのドキュメントオブジェクトモデル(DOM)を操作して、保存し直す必要があります。あなたはそのようにそれをすることができます:

Dim document As XDocument = XDocument.Load("pathtoxmlfile.xml")
Dim root = document.Root
root.Add(
    New XElement("item",
                 New XElement("name", "Item 3"),
                 New XElement("due", "Friday"))
             )
document.Save("pathtoxmlfile.xml")

これは、フレームワークのXDocumentクラスを利用します。これは、XMLファイルのオブジェクトモデルを簡単に操作するための優れたツールです。

特定のノードを選択して削除するにはどうすればよいですか?

LINQ-to-XMLを使用して、削除するクエリを記述できます。LINQクエリを記述して必要な要素を選択し、を使用するだけですRemove()。追加したアイテムを削除する例を次に示します。

Dim document As XDocument = XDocument.Load("pathtoxmlfile.xml")
Dim root = document.Root
Dim deleteThese = From e In root.Elements("item") Where e.Element("name").Value = "Item 3"
If deleteThese.Any() Then
    deleteThese.Remove()
    document.Save("pathtoxmlfile.xml")
End If
于 2012-05-07T13:19:34.150 に答える
0

ファイル内の特定の位置に書き込むことはできますが、データを挿入することはできません。ファイルの残りの部分が上書きされます。また、位置は行や文字ではなく、バイト位置です。UTF-8は一部の文字に複数のバイトを使用できるため、文字のバイト位置を見つけるのは簡単ではありません。

ファイルをオブジェクトにロードしXmlDocument、要素を追加して、ドキュメントをファイルに書き込むだけです。

于 2012-05-07T13:14:15.003 に答える
0

いいえ、XMLファイルを自分で作成することはありません。このクラスを使用してDOM構造を作成します。この構造は、それぞれのクラスXmlDocumentを使用してXMLファイルから簡単に読み書きできます。XmlWriter

または、スキーマの有無にかかわらずXMLファイルに書き込むことができる型付きデータセットを使用することもできます。

フレームワークに何かを行うクラスがある場合は、XMLファイルを手動で作成する必要はありません。

于 2012-05-07T13:14:22.177 に答える