タイトル | : Re^8: XMLのデータ追加について |
記事No | : 7530 |
投稿日 | : 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 クラスを 使うこともできます。
|