L2J
久々にN鯖を回復させようとしてみたら、元々DBだったものがかなりXMLに・・・。
ということで、ガリガリXMLを手書きするのは嫌なので、プログラムを書いてみた。
<?php $itemDir = "items"; define("NORMAL" , "0"); define("MULTIPLICATION", "1"); define("ADDITION" , "2"); define("SUBTRACTION" , "3"); define("DIVISION" , "4"); //ディレクトリ内のファイル名を1つずつを取得 $res_dir = opendir( './' . $itemDir ); while( $file_name = readdir( $res_dir ) ) if(strstr($file_name,'.xml')) $fileNameArray[] = $file_name; closedir( $res_dir ); //ファイルごとのループ foreach($fileNameArray as $fileName){ echo $fileName . "===========\n"; $file = $fileName; $xml = new SimpleXMLElement($itemDir.'/'. $fileName, null, true); //ここからどんどこ追加------------------------------------------------------ $searchIdArray = array(729, 730,947,948,951,952,955,956,959,960,6569,6570,6571,6572,6573,6574,6575,6576,6577,6578, 731,732,949,950,953,954,957,958,961,962); changeIsStackableFromIdArray($xml, $searchIdArray, "true"); //ここまでどんどこ追加------------------------------------------------------ $xml -> asXML( 'result/' . $file ); } // 検索IDからpriceの変更を実行する function changePriceFromIdArray($xml, $searchIdArray, $price){ changeKeyFromIdArray($xml, $searchIdArray, "price", $price); } // 検索IDからpriceの変更を掛け算で実行する(multiplication) function changeMultiplicationPriceFromIdArray($xml, $searchIdArray, $multiplicationValue){ changeKeyFromIdArray($xml, $searchIdArray, "price", $multiplicationValue, MULTIPLICATION); } // 検索IDからis_destroyableの変更を実行する function changeIsDestroyableFromIdArray($xml, $searchIdArray, $flag){ changeKeyFromIdArray($xml, $searchIdArray, "is_destroyable", $flag); } // 検索IDからweightの変更を実行する function changeWeightFromIdArray($xml, $searchIdArray, $weight){ changeKeyFromIdArray($xml, $searchIdArray, "weight", $weight); } // 検索IDからis_sellableの変更を実行する function changeIsSellableFromIdArray($xml, $searchIdArray, $flag){ changeKeyFromIdArray($xml, $searchIdArray, "is_sellable", $flag); } // 検索IDからis_dropableの変更を実行する function changeIsDropableFromIdArray($xml, $searchIdArray, $flag){ changeKeyFromIdArray($xml, $searchIdArray, "is_dropable", $flag); } // 検索IDからis_tradableの変更を実行する function changeIsTradableFromIdArray($xml, $searchIdArray, $flag){ changeKeyFromIdArray($xml, $searchIdArray, "is_tradable", $flag); } // 検索IDからis_depositableの変更を実行する function changeIsDepositableFromIdArray($xml, $searchIdArray, $flag){ changeKeyFromIdArray($xml, $searchIdArray, "is_depositable", $flag); } // 検索IDからis_stackableの変更を実行する function changeIsStackableFromIdArray($xml, $searchIdArray, $flag){ changeKeyFromIdArray($xml, $searchIdArray, "is_stackable", $flag); } // 検索IDからcrystal_countの変更を実行する function changeCrystalCountFromIdArray($xml, $searchIdArray, $count){ changeKeyFromIdArray($xml, $searchIdArray, "crystal_count", $count); } function changeKeyFromIdArray($xml,$searchIdArray, $key, $value, $changeFormat = NORMAL){ foreach($xml->item as $items){ //検索IDArrayに入っているか if(in_array($items->attributes()->id , $searchIdArray)){ $elementFoundFlag = false; $itemName = $items->attributes()->name; $itemType = $items->attributes()->type; $itemId = $items->attributes()->id; //要素を走査 foreach($items->set as $sets){ //keyの項目か if($sets["name"] == $key){ echo "[$itemType\t$itemId\t$itemName] $key : " . $sets["val"] . " を "; switch ($changeFormat){ case (NORMAL): $sets["val"] = $value; echo $sets["val"] . " に変換\n"; break; case (MULTIPLICATION): echo $value. "で乗算して"; $sets["val"] *= $value; echo $sets["val"] . " に変換\n"; break; case (ADDITION): echo $value. "で加算して"; $sets["val"] += $value; break; case (SUBTRACTION): echo $value. "で減算して"; $sets["val"] -= $value; break; case (DIVISION): echo $value. "で除算(÷)して"; $sets["val"] /= $value; break; } $elementFoundFlag = true; } } //要素が存在しない場合 if(!$elementFoundFlag){ switch ($changeFormat){ case (NORMAL): echo "情報: id[" . $items->attributes()->id . "]には" . $key . "が存在しない様子。適切に要素を追加しました。"; break; case (MULTIPLICATION): echo "警告: id[" . $items->attributes()->id . "]には" . $key . "が存在しない様子。" . $value. "で乗算する予定の値を、ひとまずそのまま入れておきました。"; break; case (ADDITION): echo "警告: id[" . $items->attributes()->id . "]には" . $key . "が存在しない様子。" . $value. "で加算する予定の値を、ひとまずそのまま入れておきました。"; break; case (SUBTRACTION): echo "警告: id[" . $items->attributes()->id . "]には" . $key . "が存在しない様子。" . $value. "で減算する予定だったので、ひとまず0を入れておきました。"; $value = 0; break; case (DIVISION): echo "警告: id[" . $items->attributes()->id . "]には" . $key . "が存在しない様子。" . $value. "で除算する予定だったので、ひとまず0を入れておきました。絶対修正してください。"; $value = 0; break; } $items->addChild("set name=\"$key\" val=\"$value\""); echo "\n"; } } } }