2012-05-07 8 views
0

こんにちは自分のToDoプログラムを作成しています。ユーザーがToDoアイテムを作成する機能を追加する必要があります。彼らがこれを行うとき、私はXML要素/セクションをリストファイルに追加する必要があります。VB.NET特定のファイルに書き込む(本質的に新しい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> 

セイユーザーが名「論文」が項目と期日「明日」を作成した場合、私は上記のような別のリストの要素を作成できるようにする必要があります</list>タグの前に挿入してください。

基本的には、XMLファイルの特定の位置(</list>タグの前の最後)に書き込むことができますか?ファイルの最後に行を戻すことは可能でしょうか?

答えて

1

ファイルの最後に行を戻すことは可能ですか?

確かにそうですが、そうするのは非常に危険です。 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(Document Object Model)を操作して元に戻す必要があります。あなたはそのようにそれを行うことができます:

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") 

これは、簡単にXMLファイルのオブジェクトモデルで作業するための良いツールであるFrameworkのXDocumentクラスを利用します。

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

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 
+0

ありがとうございました!それは今働く。特定のノードを選択して削除するにはどうしたらいいですか?複数のものを削除するために 'for each'ループを使用する必要がありますか?私は周りを見回しましたが、これで多くを見つけることはできません。 – ToshNeox

+0

@ToshNeox編集を参照してください。 – vcsjones

+0

ありがとうございます。それを働かせることは非常に満足のいく感じです。以前のVB.NETの知識を使って、あなたが書いたものを作成し、リストビューに従って複数のアイテムを削除しました: http://pastebin.com/VMC2A3sP – ToshNeox

0

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

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

0

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

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

いいえ方法あなたのために機能するクラスがフレームワーク内にある場合、XMLファイルを手動で記述する必要があります。

関連する問題