とうとうこのエントリーを最後に、このサンプルともお別れですね。
そういえば、このサンプルの元ネタとも、今週でお別れですね。寂しいものです。
さて、前回はエレメントの生成・追加をやったのですが、その際にエレメントがダブってしまうのは、あんまりよろしくないぞ。
というわけで、「XMLクラスに、例えば指定エレメントのノードがあるかどうか調べるメソッドでもないかしら?」と思って探してみたのですが、残念ながらそんな便利なメソッドはありませんでした。
例えば
XMLデータ.何かしらのメソッド(@id == "なんか文字列");
で、Boolean型を返してくれると非常にありがたかったのですが・・・
しかし、無いもんは無い。って事で、他の処理で代用するしかありません。
要するに、指定した値での、XMLエレメントの有無チェックが出来ればいいのです。
というわけで実験。
if(test_xml.member.(name =="田井中 律") ){
trace("エレメントがありますよ~ノシ");
}
「エレメントがありますよ~ノシ」と出力されます。
しかし・・・
if(test_xml.member.(name =="ありえないエレメント") ){
trace("エレメントがありますよ~ノシ");
}
「エレメントがありますよ~ノシ」と出力されます。
最悪だ・・・。
そこに、救世主が現れた。
その名も「toXMLString()メソッド」
そもそもこのメソッドは、実行したXML オブジェクトのエレメントのストリング表現を返すメソッドです。
なので、例えば「test_xml.member.(name =="田井中 律").toXMLString()」を実行すると
<member part="Dram">
<name>田井中 律</name>
</member>
上記の値を、XMLデータではなく、String値で返します。
大切なことなので2回言いますが、上記データは、XMLデータではなくStringデータです。
そして、上記のスクリプトを
if(test_xml.member.(name =="田井中 律").toXMLString() ){
trace("エレメントがありますよ~ノシ");
}
if(test_xml.member.(name =="ありえないエレメント").toXMLString() ){
trace("エレメントがありますよ~ノシ");
}
このように記述すれば、上のコードは、「エレメントがありますよ~ノシ」と出力され、下のコードは何も出力されません。else節があれば、そちらが実行されます。
てなわけで
前回のエントリーの、あずにゃん追加ボタン部分の関数を
/*----------------------------------------------
■addAzusaHandler
■概要
test_xmlにazunyan_xmlを追加する。
----------------------------------------------*/
function addAzusaHandler(event:MouseEvent):void{
var azunyanName:String = azunyan_xml.name.toString();
//test_xmlにあずにゃんがいたらreturnする。
if(test_xml.member.(name == azunyanName).toXMLString() ){
return;
}
test_xml.appendChild(azunyan_xml);
inIt();
}
このように書き換えました。
var azunyanName:String = azunyan_xml.name.toString();
で、追加予定のXMLデータのnameエレメントの値を取得して、
if(test_xml.member.(name == azunyanName).toXMLString() ){
return;
}
上記処理で、当該memberエレメントが既に存在していたら、returnで、関数から抜けます。
つぎに俺も入部ボタン部分の関数を
/*----------------------------------------------
■addOreHandler
■概要
oreNameの値とorePartの値から、XMLノードを生成して
test_xmlに追加する。
----------------------------------------------*/
function addOreHandler(event:MouseEvent):void{
var nameStr:String = oreName.text;
var partStr:String = orePart.text;
//テキストが空の場合return
if(nameStr == "" || partStr == ""){
return;
}
//名前・パートが被る場合return
if(test_xml.member.(@part == partStr).(name == nameStr).toXMLString() ){
return;
}
//入力内容から、XMLを生成する
var addXML:XML = <member part={partStr}><name>{nameStr}</name></member>;
test_xml.appendChild(addXML);
inIt();
}
こんな風に書き換えます。
こちらは、名前・パートの両方で抽出しています。一人の人間が複数パートを担当したり、ひとつのパートに複数担当がいたりってのはよくあるんで、Jazzとかオーケストラだと特に。



最近のコメント