tagCANDY CGI VBレスキュー(花ちゃん) の Visual Basic 2010 用 掲示板(VB.NET 掲示板)
VBレスキュー(花ちゃん) の Visual Basic 2010 用 掲示板(VB.NET 掲示板)
[ツリー表示へ]  [ワード検索]  [Home]

タイトル Re^8: XMLのデータ追加について
投稿日: 2008/05/15(Thu) 10:17
投稿者魔界の仮面弁士
> そのような書き方があるんですね!
> びっくりしました。
XML の埋め込みは、VB2005 以下では利用できない構文ですね。
(ただし VB2005 以下でも、System.Xml 名前空間のクラスを使って処理する事はできます)

VB2008 からは、言語レベルで XML を扱えるようになり、
 Dim c As XElement = <test>データ</test>
などと書けるようになっています。これは、"XML 要素リテラル"と呼ばれます。

また、From,Where,Order By といった構文でデータの抽出/列挙を行う、
 Dim target = From node In doc...<data> Where node.@id = "2"
などの「LINQ(リンク)」と呼ばれる物も、VB2008 の新機能です。

# 上記は、XLinq(LINQ to XML)とも呼ばれる事もあります。LINQ には他にも、
# DLinq(LINQ to SQL)、LINQ to DataSet, LINQ to Entities などがあります。

それから、「XML 軸プロパティ」という機能を使って、
 MsgBox( doc.<data>.Count )        'data 要素の数を取得する
 doc.<data>(1).@id = "TEST"        '2個目の<data id=""> の属性値を TEST に書き換える
 MsgBox( doc.<data>.<sub>.Value )  '最初の sub 要素の内容を取得する
のような書き方を行うこともできるようになっています。これも 2008 からですね。


> Dim docの部分は、As 〜
> と型の指定は不要なんでしょうか?
こちらも、VB2008 からの機能です。("ローカル型の推論"と呼ばれる機構です)

 Dim a = 123
 Dim b = "abc"
 Dim c = <test id="12">データ</test>
のように、宣言と同時に『初期値』を設定してある場合には、
その初期値の型が、変数の型としてコンパイルされ、結果的に
 Dim a As Integer = 123
 Dim b As String = "abc"
 Dim c As XElement = New XElement("test", New XAttribute("id", "12"), "データ")
などに展開される仕様になっています。


> もうひとつ、こんなの出来るかな・・・というのがあるのですが、
root 要素が閉じられていませんので、この XML は文法違反です。(^^;
最後の
>  </data>
> <root>
の部分は、正しくは
  </data>
</root>
の事ですよね?


> のデータをまるごとコピーして
> 指定のidの前や後ろに入れ替えることはできるのでしょうか?
もちろんできますよ。
挿入/追加用のメソッドだけではなく、削除や置換用のメソッドもありますので
ヘルプ等で探してみてください。

また、そうした XML DOM による操作を行う以外にも、
『XSLT』を使って整形する方法などもあります。やり方は色々と。


> また、指定範囲のXMLを別のXMLのファイルにそのままコピーして書き込む、
> などもやってみたいと思うのですが・・・
もちろん、XML ファイルの読み込み/書き込みもまた、機能として用意されています。

コンストラクタでファイル名を指定するものもあれば、Save/Load メソッドが
付いているものもあるなど、使用するクラス(XmlDocument とか、XDocument/XElement とか)
によって、必要な構文はそれぞれ異なりますけれどね。

また、巨大な XML ファイルなどのように、すべてをメモリ上に一括ロードすることが
困難な場合には、先頭から順次処理していくための XmlReader / XmlWriter クラスを
使うこともできます。

- 関連一覧ツリー をクリックするとツリー全体を一括表示します)

古いスレッドにレスはつけられません。