Indesign XSLT从文件夹中选择随机图像

时间:2017-12-01 20:45:39

标签: xml xslt adobe-indesign

我正在使用Indesign导入StatCrew XML文件并创建游戏后图形。我应该提供更多细节。 StatCrew生成一个不同的xml文件。以下是完整档案:

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

这是我当前的XSLT文件:

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

使用上面的XSLT,我可以找到得分最高的玩家,并且可以选择与@uni号码同名的目录中的照片。在此示例中,Indesign将显示名为05.psd的.psd文件。

从Indesign导出为JPG。我明白了:

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

然而,我想要做的是让Indesign从名为05的FOLDER中随机选择一个.psd文件。这可能吗?我从互联网上的信息中学到了所有这些,并且没有真正的XML背景。

2 个答案:

答案 0 :(得分:0)

我想您需要找出可以与InDesign一起使用的XSLT处理器,以及它是否支持某些文件系统访问和随机数生成。

在Saxon 9.8和Altova 2017/2018支持的XSLT 3中,您可以生成一个随机数https://www.w3.org/TR/xpath-functions/#func-random-number-generator,例如

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

这将在0(包括)和1之间提供双倍(排除),然后您可以乘以您拥有的图像数量并舍入以获得整数。另一个选择是使用随机数生成器的permute函数,例如

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

为您提供120之间的随机整数,当然您可以将表达式1 to 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。

答案 1 :(得分:0)

我不认为你可以用XSLT做到这一点,但是一个简单的脚本可以让它变得简单。在这里,我添加了一个可以使用XSLT的url参数。



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

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

运行后,它会提示您输入XML文件,并添加包含随机网址的新属性(网址)。

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

然后你可以调整你的xsl:

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