スポンサーリンク

XML読み込みオプションを設定する

InDesign XML組版:Javascriptで読み込みオプションを設定する

Javascriptを使って、XMLデータをドキュメントに読み込む方法を紹介します。
読み込みにはimportXMLメソッドを使いますが、その前にxmlImportPreferencesで読み込みオプションを設定します。

順を追って説明していきます。

InDesignドキュメントにプレースホルダーを作成しておく

XMLデータを読み込むドキュメントは、既に下記のように作成してあることを前提にして説明します。

InDesignに作成したXMLプレースホルダ

今回のXMLの読み込み例では、見出し(商品名)となるテキストの行と3つの表を含むテキストフレームを1単位(1商品)として、複数のテキストフレーム(複数の商品)を読み込みます。

1つ目と3つ目の表の行数は、各商品の内容によって変わります。

プレースホルダーの作成については、表形式の例を以下で解説しています。

表組み:XML基本レイアウトの作成
InDesignでのXML組版を前提にした表組みを作成します。表のレイアウト全体をXML構造という視点で見ることが大切です。InDesignにXMLデータを読み込むだけでは、紙面レイアウトは作成されません。
表組み:XMLプレースホルダーの作成
XML組版でデータを流し込むためのレイアウトを作成したら、そのレイアウトにXMLタグを割り当ててプレースホルダーとして完成させます。タグをつけることで、レイアウトがXML構造を持つことになります。ここでは表形式のレイアウトにタグを付けます。

読み込み用のXMLデータを準備する

InDesignに読み込むXMLデータは、次のように作成してあります。

InDesignのプレースホルダに読み込むXMLデータ

<Root>直下の<価格表群>タグは、上に示したドキュメントで選択されている一番大きなテキストフレームです。

その<価格表群>の下に、<価格表>タグで3つの商品情報が入っています。

<価格表>の中には、まず「商品名」が入り、改行したあとに表が続きます。

InDesignの表は、一つの表として作ることもできますが、XMLデータを作る際の分かりやすさも考えて、3つの表がくっついた状態にしてあります。

ドキュメント展開するXMLデータの改行の扱いには、気をつける必要があります。
通常はXMLの改行は意味を持ちませんが、紙面での改行は改行文字です。

今回の例では、商品名の次には改行を入れたいので、そこだけ、改行を<商品名改行>タグで囲ってあります。

それ以外の改行は、エディタでの見易さのために改行しているだけなのでタグは付けていません。
InDesignに読み込むと無視されます。(というか、無視されるように読み込みオプションを設定します。)

ソースコードのサンプルと実行結果

プレースホルダとXMLデータの準備ができたので、以下のjavascriptで読み込んでみます。

#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");

実行した結果、こうなりました。
InDesignにXMLを読み込んだ結果

xmlImportPreferencesの設定内容

XMLデータの読み込みには、読み込み方法の設定が欠かせません。

今回のXML読み込みオプションは、次の設定で読み込んでいます。
今回の読み込みで特に重要な設定5つを解説します。

「繰り返すテキスト要素を複製」をtrue

読み込み用に準備したInDesignドキュメント(プレースホルダ)には、ひとつの商品を流し込むためのテキストフレームを、ひとつだけ作成してあります。

このテキストフレーム(ひとつの商品)を、読み込むXMLデータにしたがって、必要な数を複製しながら流し込みます。
そのために「繰り返すテキスト要素を複製」をチェック(true)します。

(参考)
falseで読み込んだ場合(他の設定は変更なし)はプレースホルダーは複製されず、以下のようになってしまいます。
XML読み込みオプション:繰り返すテキスト要素を複製

「既存の構造に一致する要素のみ読み込む」をfalse

各テキストフレーム(各商品)内の表は、情報量によって行数を変える必要があります。

「既存の構造に一致する要素のみ読み込む」をチェック(true)してしまうと、既存の構造に一致する行数分しか読み込めません。

ここでは表内の行を増やす必要があるので、「既存の構造に一致する要素のみ読み込む」のチェックを外し(false)ます。

(参考)
trueで読み込んだ場合(他の設定は変更なし)は、もとのプレースホルダーの行数は変わらず、行数は増えません。
XML読み込みオプション:既存の構造に一致する要素のみ読み込む

「タグが一致した場合テキスト要素を表に読み込む」をtrue

タグの一致したXMLデータを表組みに流し込む際には、「タグが一致した場合テキスト要素を表に読み込む」をチェック(true)します。

(参考)
falseで読み込んだ場合(他の設定は変更なし)は、データは表に読み込まれません。
XML読み込みオプション:タグが一致した場合テキスト要素を表に読み込む

「空白のみの要素を読み込まない」をtrue

2つ目の表の「商品番号」「色番号」「サイズ番号」など、表のマクラの部分は、XMLデータに文字を入れておらずカラ要素にしてあります。

カラ要素のXMLデータを読み込んで、InDesignの表のマクラ文字を上書きして消してしまわないために、「空白のみの要素を読み込まない」をチェック(true)します。

空白のみの要素には、上記のようなタグのみしかないカラ要素のほかに、改行タブも含まれます。

なので、もし「空白のみの要素を読み込む」ことにしてしまうと、単にXMLデータの見易さのために入れてある改行も、読み込まれてしまうことになります。

(参考)
falseで読み込んだ場合(他の設定は変更なし)は、タグの付いていない改行や、空白要素もXMLデータから読み込まれる。
XML読み込みオプション:空白のみの要素を読み込まない

「読み込まれたXMLに一致しない要素、フレームおよび内容を削除」をtrue

今回の例では、各商品の情報量によって表内の行を増やします。

例えば「Aブラウス」のサイズは「5L」まで、「Bブラウス」はLLまで、「Cブラウス」は4Lまでというように、その数に応じた行数を表示するわけです。

その際、例えば「Aブラウス」で5Lまで追加された行は、次の「Bブラウス」ではLLまでしか必要ないので、3Lから5Lまでの不要な行は削除する必要があります。

「読み込まれたXMLに一致しない要素、フレームおよび内容を削除」をチェック(true)すると、XMLデータの情報量に応じて行数が加減されます。

(参考)
falseで読み込んだ場合(他の設定は変更なし)は、一度増えた行数が、それ以降でも削除されない。
XML読み込みオプション:読み込まれたXMLに一致しない要素、フレームおよび内容を削除