我正在使用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背景。
答案 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]
为您提供1
和20
之间的随机整数,当然您可以将表达式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;
运行后,它会提示您输入XML文件,并添加包含随机网址的新属性(网址)。
<player url="05/A.psd" uni="05" code="05" name="ONE, Player" checkname="ONE,PLAYER" class="JR" gp="1">
&#13;
然后你可以调整你的xsl:
<xsl:copy-of select="$WBB_player_location" />player/<xsl:value-of select="@url"/>
&#13;