構造の選択された属性の値を要素名にするスクリプトは、これで良いのかな・・・?
/*
構造の選択された属性の値を要素名にする
更新 2021/6/4
*/
// アプリ指定
#target "indesign";
// スクリプト名
var scriptName = "要素名に(構造の選択された属性の値を)";
//スクリプト動作指定(一つのアンドゥ履歴にする及びアンドゥ名の指定)
app.doScript(function () {
// 選択されているオブジェクト
selectObjects = app.activeDocument.selection;
// 変更された要素名数
var changeElementNameNumber = 0;
// 選択されているオブジェクトの数だけ繰り返す
for(var i = 0; i < selectObjects.length; i++){
// 選択がXml属性の場合
if(selectObjects[i].constructor.name == "XMLAttribute"){
// 選択の親のXml要素のタグ名と属性の値が違う場合
if(selectObjects[i].parent.markupTag.name != selectObjects[i].value){
// 属性の値のXmlタグ名が存在しない場合
if(app.activeDocument.xmlTags.itemByName(selectObjects[i].value).isValid == false){
// エラー対策
try{
// 属性の値の名前のXmlタグを追加
app.activeDocument.xmlTags.add(selectObjects[i].value);
// エラーの場合
}catch(e){
// 次の繰り返しへ
continue;
}
}
// Xml要素のタグに属性の値の名前のXmlタグを入れる
selectObjects[i].parent.markupTag = app.activeDocument.xmlTags.itemByName(selectObjects[i].value);
// 変更された要素名数を追加
changeElementNameNumber++;
}
}
}
// 結果表示
alert("変更数 " + changeElementNameNumber, scriptName);
//スクリプト動作指定(一つのアンドゥ履歴にする及びアンドゥ名の指定)の続き
}, ScriptLanguage.JAVASCRIPT, [scriptName], UndoModes.ENTIRE_SCRIPT, scriptName);