LINE2019.06.10Javascriptを使って、XMLデータをドキュメントに読み込む方法を紹介します。読み込みにはimportXMLメソッドを使いますが、その前にxmlImportPreferencesで読み込みオプションを設定します。順を追って説明していきます。「繰り返すテキスト要素を複製」をtrue「既存の構造に一致する要素のみ読み込む」をfalse「タグが一致した場合テキスト要素を表に読み込む」をtrue「空白のみの要素を読み込まない」をtrue「読み込まれたXMLに一致しない要素、フレームおよび内容を削除」をtrueInDesignドキュメントにプレースホルダーを作成しておくXMLデータを読み込むドキュメントは、既に下記のように作成してあることを前提にして説明します。今回のXMLの読み込み例では、見出し(商品名)となるテキストの行と3つの表を含むテキストフレームを1単位(1商品)として、複数のテキストフレーム(複数の商品)を読み込みます。1つ目と3つ目の表の行数は、各商品の内容によって変わります。プレースホルダーの作成については、表形式の例を以下で解説しています。XML組版:基本レイアウトの作成(表組み)InDesignでのXML組版を前提にした表組みを作成します。表のレイアウト全体をXML構造という視点で見ることが大切です。InDesignにXMLデータを読み込むだけでは、紙面レイアウトは作成されません。dtpscriptin.com2018.12.25XML組版:プレースホルダーの作成(表組み)XML組版でデータを流し込むためのレイアウトを作成したら、そのレイアウトにXMLタグを割り当ててプレースホルダーとして完成させます。タグをつけることで、レイアウトがXML構造を持つことになります。ここでは表形式のレイアウトにタグを付けます。dtpscriptin.com2018.12.25読み込み用のXMLデータを準備するInDesignに読み込むXMLデータは、次のように作成してあります。<Root>直下の<価格表群>タグは、上に示したドキュメントで選択されている一番大きなテキストフレームです。その<価格表群>の下に、<価格表>タグで3つの商品情報が入っています。<価格表>の中には、まず「商品名」が入り、改行したあとに表が続きます。InDesignの表は、一つの表として作ることもできますが、XMLデータを作る際の分かりやすさも考えて、3つの表がくっついた状態にしてあります。ドキュメント展開するXMLデータの改行の扱いには、気をつける必要があります。通常はXMLの改行は意味を持ちませんが、紙面での改行は改行文字です。今回の例では、商品名の次には改行を入れたいので、そこだけ、改行を<商品名改行>タグで囲ってあります。それ以外の改行は、エディタでの見易さのために改行しているだけなのでタグは付けていません。InDesignに読み込むと無視されます。(というか、無視されるように読み込みオプションを設定します。)ソースコードのサンプルと実行結果プレースホルダとXMLデータの準備ができたので、以下のjavascriptで読み込んでみます。XMLデータを読み込むmyDoc.importXML("C:/Users/riptin/Documents/XML組版_読込み.xml");実行した結果、こうなりました。xmlImportPreferencesの設定内容XMLデータの読み込みには、読み込み方法の設定が欠かせません。今回のXML読み込みオプションは、次の設定で読み込んでいます。今回の読み込みで特に重要な設定5つを解説します。「繰り返すテキスト要素を複製」をtrue読み込み用に準備したInDesignドキュメント(プレースホルダ)には、ひとつの商品を流し込むためのテキストフレームを、ひとつだけ作成してあります。このテキストフレーム(ひとつの商品)を、読み込むXMLデータにしたがって、必要な数を複製しながら流し込みます。そのために「繰り返すテキスト要素を複製」をチェック(true)します。(参考)falseで読み込んだ場合(他の設定は変更なし)はプレースホルダーは複製されず、以下のようになってしまいます。「既存の構造に一致する要素のみ読み込む」をfalse各テキストフレーム(各商品)内の表は、情報量によって行数を変える必要があります。「既存の構造に一致する要素のみ読み込む」をチェック(true)してしまうと、既存の構造に一致する行数分しか読み込めません。ここでは表内の行を増やす必要があるので、「既存の構造に一致する要素のみ読み込む」のチェックを外し(false)ます。(参考)trueで読み込んだ場合(他の設定は変更なし)は、もとのプレースホルダーの行数は変わらず、行数は増えません。「タグが一致した場合テキスト要素を表に読み込む」をtrueタグの一致したXMLデータを表組みに流し込む際には、「タグが一致した場合テキスト要素を表に読み込む」をチェック(true)します。(参考)falseで読み込んだ場合(他の設定は変更なし)は、データは表に読み込まれません。サイズ番号」など、表のマクラの部分は、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で読み込んだ場合(他の設定は変更なし)は、一度増えた行数が、それ以降でも削除されない。