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の子として追加します。
xml2に対して、itemエレメントで@name="XX001"のデータの親を参照すると、下記のようになります。これも問題なし。var xmlList:XMLList = xml..item.(@name=="XXX001");var xml2:XML = new XML("<top></top>")for each (var item:XML in xmlList) {xml2.appendChild(item);}
この後に、元々のXML(xml)に対して、同じく親を参照すると・・・trace(xml2..item.(@name=="XXX001").parent());----<top><item name="XXX001"/></top>
trace(xml..item.(@name=="XXX001").parent());----<top><item name="XXX001"/></top>
と、別XMLの親を参照してしまいます。該当エレメントを別XMLに追加してしまうと、元XMLの該当エレメントの参照も変わってしまうようなのです。
これってどういうことなんでしょうね???もっとも別XMLにしたいなら、XML.copy()で複製を作れって話ではあるんですけけど、ちょっと納得いかない感じです。
