InDesignドキュメントにXMLデータを読み込むには、レイアウトとXMLデータの形式が合致するように読み込みオプションを設定します。
XML読み込みオプションは、InDesignでどんなレイアウトに流し込むのかによって、設定内容が違ってきます。
この記事では、InDesignであらかじめ作成してあるレイアウトに、実際にXMLデータ流し込む際に、読み込みオプションの各項目を「チェックする(true)」の場合と、「チェックしない(false)」場合の結果の違いも紹介しています。
スクリプトで流し込むプログラミングコードも紹介していますが、マウス操作でXMLデータを読み込む場合でもわかるように解説しました。
Adobe公式サイト Adobe InDesignの機能を詳しく見てみる
XMLデータを読み込む表組レイアウト
XMLデータを読み込むドキュメントには、あらかじめ下記のような表が作成してあることを前提にして説明します。
表は、洋服の通販雑誌などでよく見る形で、「商品名」「商品番号」「サイズ」「色」などが入ります。
このInDesignの表は、XMLデータを読み込むことを考慮しなければ、一つの表として作ることもできますが、XMLデータを作る際の分かりやすさも考えて、3つの表がくっついた状態にしてあります。
- 表の前に「商品名」の見出し行
- 1つ目の表:サイズ展開と・価格(商品によって行が増減する)
- 2つ目の表:「商品番号」「色番号」「サイズ番号」(行数は固定)
- 3つ目の表:各サイズごとの寸法(商品によって行が増減する)
今回のXMLの読み込み例では、見出し(商品名)となるテキストの行と、3つの表を含むテキストフレームを1単位(1商品)として、複数のテキストフレーム(複数の商品)を読み込みます。
1つ目と3つ目の表の行数は、各商品の内容によって変わります。
XML読み込みを前提にした表作成の実例は、以下で詳しく解説しています。
XMLデータの構成
InDesignに読み込むXMLデータは、次のように作成してあります。
<Root>直下の<価格表群>タグは、上に示したドキュメントで選択されている一番大きなテキストフレームです。
その<価格表群>の下に、<価格表>タグで3つの商品情報が入っています。
<価格表>の中には、まず「商品名」が入り、改行したあとに表が続きます。
ドキュメント展開するXMLデータの「改行の扱い」には、気をつける必要があります。
通常はXMLの改行は意味を持ちませんが、「紙面での改行は改行文字」です。
今回の例では、商品名の次には改行を入れたいので、そこだけ、改行を<商品名改行>タグで囲ってあります。
それ以外の改行は、エディタでの見易さのために改行しているだけなのでタグは付けていません。
InDesignに読み込むと無視されます。(というか、無視されるように読み込みオプションを設定します。)
スクリプトコードのサンプルと実行結果
XML読み込み用のプレースホルダとXMLデータの準備ができたので、以下のjavascriptでXMLデータをドキュメントに読み込んでみます。
#target "InDesign-14";
//今開いているドキュメントを取得
var myDoc = app.activeDocument;
//読み込みオプション設定を開始
var myXMLImpPrf = myDoc.xmlImportPreferences;
//選択した要素へ読み込むかどうか - ルート要素に読み込む
myXMLImpPrf.importToSelected = false;
//モード - 内容を結合
myXMLImpPrf.importStyle =XMLImportStyles.MERGE_IMPORT;
//リンクを作成するかどうか - 作成しない
myXMLImpPrf.createLinkToXML = false;
//XSLTを適用するかどうか - 適用しない
myXMLImpPrf.allowTransform = false;
//繰り返すテキストを要素を複製するかどうか - 複製する
myXMLImpPrf.repeatTextElements = true;
//既存の構造に一致する要素のみ読み込むかどうか - 一致要素のみでなく全体を読み込む
myXMLImpPrf.ignoreUnmatchedIncoming = false;
//タグが一致した場合テキスト要素を表に読み込むかどうか - 一致した場合表に読み込む
myXMLImpPrf.importTextIntoTables = true;
//空白のみの要素を読み込むかどうか - 読み込まない
myXMLImpPrf.ignoreWhitespace = true;
//読み込まれたXMLに一致しない要素、フレームおよび内容を削除するかどうか - 削除する
myXMLImpPrf.removeUnmatchedExisting =true;
//CALSテーブルをInDesignテーブルとして読み込むかどうか - しない
myXMLImpPrf.importCALSTables = false;
// XMLデータを読み込む
myDoc.importXML("C:/Users/riptin/Documents/XML組版_読込み.xml");
実行した結果、こうなりました。
「XML読み込みオプション」の設定内容
XMLデータをInDesignに読み込みには、読み込み方法の設定が欠かせません。
今回のXML読み込みオプションは、次の設定で読み込んでいます。
今回の読み込みで特に重要なポイントとなっているのは、次の5つです。
「繰り返すテキスト要素を複製」をチェック(true)
読み込み用に準備したInDesignドキュメント(プレースホルダ)には、ひとつの商品を流し込むためのテキストフレームを、ひとつだけ作成してあります。
このテキストフレーム(ひとつの商品)を、読み込むXMLデータにしたがって、必要な数を複製しながら流し込みます。
そのために「繰り返すテキスト要素を複製」をチェック(true)します。
このケースでは、falseで読み込んだ場合(他の設定は変更なし)はプレースホルダーは複製されず、以下のようになってしまいます。
「既存の構造に一致する要素のみ読み込む」はチェックしない(false)
各テキストフレーム(各商品)内の表は、情報量によって行数を変える必要があります。
「既存の構造に一致する要素のみ読み込む」をチェック(true)してしまうと、既存の構造に一致する行数分しか読み込めません。
ここでは表内の行を増やす必要があるので、「既存の構造に一致する要素のみ読み込む」のチェックを外し(false)ます。
このケースでは、trueで読み込んだ場合(他の設定は変更なし)は、もとのプレースホルダーの行数は変わらず、行数は増えません。
「タグが一致した場合テキスト要素を表に読み込む」をチェック(true)
タグの一致したXMLデータを「表組み」に流し込む際には、「タグが一致した場合テキスト要素を表に読み込む」をチェック(true)します。
このケースでは、falseで読み込んだ場合(他の設定は変更なし)は、データは表に読み込まれません。
「空白のみの要素を読み込まない」をチェック(true)
2つ目の表の「商品番号」「色番号」「サイズ番号」など、表のマクラの部分は、XMLデータに文字を入れておらず「カラ要素」にしてあります。
カラ要素のXMLデータを読み込んで、InDesignの表のマクラ文字を上書きして消してしまわないために、「空白のみの要素を読み込まない」をチェック(true)します。
「空白のみの要素」には、上記のような「タグのみしかないカラ要素」のほかに、「改行」や「タブ」も該当します。
なので、もし「空白のみの要素を読み込む」ことにしてしまうと、単にXMLデータの見易さのために入れてある改行も、読み込まれてしまうことになります。
このケースでは、falseで読み込んだ場合(他の設定は変更なし)は、タグの付いていない改行や、空白要素もXMLデータから読み込まれます。
「読み込まれたXMLに一致しない要素、フレームおよび内容を削除」をチェック(true)
今回の例では、各商品の情報量によって表内の行を増やします。
例えば「Aブラウス」のサイズは「5L」まで、「Bブラウス」はLLまで、「Cブラウス」は4Lまでというように、その数に応じた行数を表示するわけです。
その際、例えば「Aブラウス」で5Lまで追加された行は、次の「Bブラウス」ではLLまでしか必要ないので、3Lから5Lまでの不要な行は削除する必要があります。
「読み込まれたXMLに一致しない要素、フレームおよび内容を削除」をチェック(true)すると、XMLデータの情報量に応じて行数が変わります。
このケースでは、falseで読み込んだ場合(他の設定は変更なし)は、一度増えた行数が、それ以降でも削除されません。
ここで紹介した表組みの作成記事はこちら