XMLから取り出したエレメントの親への参照

XMLをいじっていて不思議な現象が。下記のようなXMLを定義します。

var xml:XML =
<itemlist>
<itemGroup name=”X”>
<itemGroup name=”XX”>
<itemGroup name=”XXX”>
<item name=”XXX001″ />
<item name=”XXX002″ />
<item name=”XXX003″ />
<item name=”XXX004″ />
<item name=”XXX005″ />
</itemGroup>
</itemGroup>
<item name=”X-001″ />
<item name=”X-002″ />
</itemGroup>
</itemlist>;
この中のitemエレメントで@name=”XX001″のデータの親を参照すると、下記のようになります。これは問題なし。
trace(xml..item.(@name==”XXX001″).parent());
—-
<itemGroup name=”XXX”>
  <item name=”XXX001″/>
  <item name=”XXX002″/>
  <item name=”XXX003″/>
  <item name=”XXX004″/>
  <item name=”XXX005″/>
</itemGroup>
次に同じ条件でitemエレメントを検索して、それを別XMLの子として追加します。
var xmlList:XMLList = xml..item.(@name==”XXX001″);
var xml2:XML = new XML(“<top></top>”)
for each (var item:XML in xmlList) {
xml2.appendChild(item);
}

xml2に対して、itemエレメントで@name=”XX001″のデータの親を参照すると、下記のようになります。これも問題なし。

trace(xml2..item.(@name==”XXX001″).parent());
—-
<top>
  <item name=”XXX001″/>
</top>

この後に、元々のXML(xml)に対して、同じく親を参照すると・・・

trace(xml..item.(@name==”XXX001″).parent());
—-
<top>
  <item name=”XXX001″/>
</top>
と、別XMLの親を参照してしまいます。該当エレメントを別XMLに追加してしまうと、元XMLの該当エレメントの参照も変わってしまうようなのです。
これってどういうことなんでしょうね???もっとも別XMLにしたいなら、XML.copy()で複製を作れって話ではあるんですけけど、ちょっと納得いかない感じです。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です


*