XML 要素の操作

今回は要素を扱うためのメソッドをいくつか紹介します。

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>

コメントする

2014年1月

Sun Mon Tue Wed Thu Fri Sat
      1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31  
レンタルサーバー

月別 アーカイブ

Powered by Movable Type 4.261