2017-12-01 46 views
0

私はStatCrew XMLファイルをインポートしてポストゲームグラフィックを作成するためにIndesignを使用しています。私はおそらく詳細を与えるべきです。 StatCrewは異なるxmlファイルを生成します。以下は、完全なファイルされる:Indesign XSLTフォルダからランダムイメージを選択

https://drive.google.com/file/d/11sGFbXlkTlEwmzBVE-yMZVBbYYPLEwLK/view?usp=sharing

ここでは私の現在のXSLTファイルである:上記のXSLTを使用して

https://drive.google.com/file/d/1NJ6ltaz-sxufFBV7QCsjFn7l36HxKeHJ/view?usp=sharing

、私が最もポイントを獲得選手を見つけて、InDesignの選択を持つことができます@uni番号と同じ名前のディレクトリからの写真。この例では、Indesignは05.psdという名前の.psdファイルを表示します。

JPGとしてIndesignからエクスポートされました。私はこれを取得:

https://i.imgur.com/SoPt6sB.jpg

私がやりたい何か、しかし、InDesignでは05という名前のフォルダからランダムに.PSDファイルを選択していている可能ということですか?私はインターネット上の情報からこれをすべて学んでおり、XMLには本当の背景がありません。

答えて

0

InDesignで使用できるXSLTプロセッサと、ファイルシステムのアクセスとランダムをサポートしているかどうかを調べる必要があります番号生成。

Saxon 9.8およびAltova 2017/2018でサポートされているXSLT 3では、https://www.w3.org/TR/xpath-functions/#func-random-number-generatorなどの乱数を生成できます。そして1(含む)0との間に二重を与える

random-number-generator(current-dateTime())?number 

(除外)あなたは、あなたが持っている画像の数と整数を得るためにラウンドを掛けることができます。他の選択肢は、例えば乱数発生器の機能をpermuteとすることである。

random-number-generator(current-dateTime())?permute(1 to 20)[1] 

あなた1そしてもちろん、あなたが持っているイメージの数に表現1 to 20を調整します20間のランダムな整数を与えます。

また、Saxon 9.8では、たとえば、次のような場所で.psdファイルを特定することも可能です。 uri-collection('file:///C:/folder/subfolder?select=*.psd')だから、

random-number-generator(current-dateTime())?permute(uri-collection('file:///C:/folder/subfolder?select=*.psd'))[1] 

を使用して、その場所からランダムなファイルURIを直接選択することができます。

+0

を、InDesignのは、Xalanのプロセッサを使用し、唯一だから、XSLTのバージョン1.0 – Loic

+0

をサポートしていますこれはうまくいくものではありませんか? –

+0

Saxon 9.8のようなXSLT 3プロセッサが必要です。これはXalanの代わりにプラグインできるプロジェクトに依存します。 –

0

私はあなたがXSLTでそれを行うことはできないと思っていますが、indesignスクリプトはそれを簡単にします。ここでは、XSLTで作業できるurlパラメータを追加します。

var main = function() { 
 
\t var m = $.os[0]=="M", 
 
\t wf = "XML files : *.xml;", 
 
\t mf = function(f){return (f instanceof Folder) || /\.xml$/.test(f.name)}, 
 
\t f = File.openDialog("Please select xml file…", m? mf : wf), 
 
\t xo, 
 
\t ps, p, n, 
 
\t uni, 
 
\t baseFolder = Folder (Folder.desktop), 
 
\t playerFolder, psds, fileAttr; 
 
\t 
 
\t if (!f) return; 
 
\t 
 
\t f.open('r'); 
 
\t f.encoding = "UTF-8"; 
 
\t xo = XML(f.read()); 
 
\t f.close(); 
 
\t 
 
\t ps = xo.player; 
 
\t n = ps.length(); 
 
\t 
 
\t while (n--) { 
 
\t \t p = ps[n]; 
 
\t \t 
 
\t \t uni = String([email protected]); 
 
\t \t playerFolder = Folder (baseFolder+"/"+uni); 
 
\t \t if (!playerFolder.exists) { 
 
\t \t \t fileAttr = uni+".psd"; 
 
\t \t } 
 
\t \t else { 
 
\t \t \t psds = playerFolder.getFiles ("*.psd"); 
 
\t \t \t if (!psds.length) { 
 
\t \t \t \t fileAttr = uni+".psd"; \t 
 
\t \t \t } 
 
\t \t \t else { 
 
\t \t \t \t fileAttr = uni+"/"+decodeURI(psds[ getRandomInt (0, psds.length)].name); 
 
\t \t \t } 
 
\t \t } 
 
\t \t [email protected] = fileAttr; 
 
\t } 
 
\t 
 
\t f.open('w'); 
 
\t f.write ('<?xml version="1.0" encoding="UTF-8"?>\r'+xo.toXMLString()); 
 
\t f.close(); 
 
\t 
 
\t f.execute(); 
 
\t 
 
} 
 

 
function getRandomInt(min, max) { 
 
    return Math.floor(Math.random() * (max - min + 1) + min); 
 
} 
 

 
var u; 
 

 
app.doScript ("main()",u,u,UndoModes.ENTIRE_SCRIPT, "The Script");

実行すると、それはXMLファイルが要求されますし、ランダムなURLを含む新しい属性(URL)を追加します。

<player url="05/A.psd" uni="05" code="05" name="ONE, Player" checkname="ONE,PLAYER" class="JR" gp="1">

次に、あなたがあなたのXSLを微調整することができます簡単なメモとして

  <xsl:copy-of select="$WBB_player_location" />player/<xsl:value-of select="@url"/>

+0

私はスクリプトについて何も知りません...しかし、私は今日後でこれと遊び、それから何が来るのかを見ていきます –