今回は要素を扱うためのメソッドをいくつか紹介します。
child() メソッド
1つ目は、child() メソッドです。child() メソッドは . (ドット)オペレータと組み合わせて使用します。引数には要素名を指定できます。次の例では myOrder.item.child("name") という使い方がされていますが、これは myOrder.item.name と同じ結果になります。
var myOrder:XML = <order> <item id="1" quantity="1"> <name>fresh burger</name> <price>300</price> </item> <item id="2" quantity="1"> <name>french fries</name> <price>170</price> </item> </order>; trace(myOrder.item.child("name")); // 以下が出力される // <name>fresh burger</name> // <name>french fries</name>
XMLList に対して child() メソッドを呼ぶとリスト内のオブジェクトそれぞれに対して child() が呼ばれます。上の例では myOrder.item は2つのオブジェクトを持つ XMLList です。そのため2つの name ノードが出力されるわけです。(ちなみに myOrder.item.child("name") と myOrder.item["name"] も同じ結果になります)
さて、child() メソッドの引数にはインデックス値を指定することもできます。この場合は子ノードの順番を指定することになります。例えば下の例のように 0 を引数にすると item ノードの最初の子ノードが対象になります。
trace(myOrder.item.child(0)); // 以下が出力される // <name>fresh burger</name> // <name>french fries</name>
そのほかに、引数に "*" (アスタリスク)を渡すと child() は全ての子ノードを返します。これは children() メソッドを呼んだ場合と同じ結果になるようです。
trace(myOrder.item.child("*")); // 以下が出力される // <name>fresh burger</name> // <price>300</price> // <name>french fries</name> // <price>170</price>
parent() メソッド
次は parent() です。このメソッドを使用すると親ノードを取得することができます。parent() は複数の親ノードが存在するような XMLList には使用することができません。
例えば、myOrder.item には2つのオブジェクトが含まれますがどちらの親も myOrder のため myOrder.item.parent() は myOrder になります。一方、myOrder.item.name.parent() は2つの name ノードの親がそれぞれ違う item ノードのため結果は undefined になります。
trace(myOrder.item.parent()); // <order> // ... 中略 // </order> trace(myOrder.item.name.parent()); // undefind が出力される
子ノードの追加
子ノードの追加には目的に応じていくつかのメソッドがあります。
最初の2つはリストの最初か最後にノードを追加します。引数は XML オブジェクトまたは XML オブジェクトの初期値となる文字列です。
public appendChild(child:Object) : XML public prependChild(child:Object) : XML
具体的な例を示します。
var x1:XML = <family> <kid>child1</kid> <kid>child2</kid> </family> x1.appendChild(<kid>child3</kid>); x1.prependChild(<kid>child0</kid>); trace(x1); // <family> // <kid>child0</kid> // <kid>child1</kid> // <kid>child2</kid> // <kid>child3</kid> //</family>
残りの2つは第1引数で指定された XML オブジェクトの前もしくは後に第2引数の XML オブジェクトを挿入します。
public insertChildBefore(child1:Object, child2:Object):XML public insertChildAfter(child1:Object, child2:Object):XML
こちらもサンプルを。
var x2:XML = <family> <kid>child1</kid> <kid>child2</kid> </family> x2.insertChildBefore(x2.kid[0], <kid>child0</kid>); x2.insertChildAfter(x2.kid[2], <kid>child3</kid>); trace(x2); // <family> // <kid>child0</kid> // <kid>child1</kid> // <kid>child2</kid> // <kid>child3</kid> //</family>
コメントする