如何根据用于Indesign的Extendscript中的名称在xml标签之间导出内容?

时间:2018-09-27 05:05:13

标签: adobe-indesign extendscript

我在这里要做的只是打开一个InDesign 2018 CC文件,唯一地拉出文本(这里我选择从InDesign应用程序端的命名标签窗口中的XML标签“ Title”中获取内容),将其保存到txt文件,然后关闭InDesign文档。我正在使用Adobe InDesign CC 2018(13.064)在Extendscript应用程序中工作。我只需要将基于某些内容的某些命名数据(文本框,xmltags,pageitems等)的内容仅推入txt文件即可,但要通过数据持有者的名字。但是xmltags是我可以在InDesign应用程序中命名的唯一对象(图层除外),并且图层由于其他原因无法工作。因此,我无法引用xml标记的内容。请帮忙。

注意:

  1. 此代码出现错误,表明未定义“标题”,并且我理解该错误,但是不确定如何使用XML.toString()方法而不引用在InDesign文件中命名的对象。所以我想我使用了错误的方法来引用已经位于文件中的带有xml标签的数据?
  2. 很自然地,我扔掉XML.toString()并利用注释掉的代码(在下面)“ app.activeDocument.xmlItems.item;”。想想也许我会得到所有带有xml标记的项目的数组,这甚至还不足以实现我的目标,但是我很绝望,并且在代码的“ exportfile”行中遇到了另一个新的错误:myArticles.exportFile( )不是函数。

到目前为止,我的代码:

app.open(File("C:/Users/Sean/Desktop/New folder/va tech 2.indd"), true);
myArticles = Title.toString();
//THIS ATTEMPT WON'T WORK EITHER AS RPLCMNT FOR LINE ABOVE: myArticles= app.activeDocument.xmlItems.item;  
myArticles.exportFile(ExportFormat.textType, new File("/C/Users/Sean/Desktop/New folder/test.txt"), false);
app.documents.everyItem().close(SaveOptions.NO);

1 个答案:

答案 0 :(得分:0)

var main = function() {
	
	var doc, root, xes, n, nXE, st, xc, strs = [],
	f = File ( Folder.desktop+"/contents.txt" );
	
	try {
		
		//NEED TO CHANGE THE URL. Ex:  some/url > /Users/user/Desktop/foo.indd
		doc = app.open ( File ( "some/url" ) );
	}
	catch(err){
			alert(err.message);
			return;
	}

	if ( !doc ) {
		alert("You need an open document" );
		return;
	}
	
	root = doc.xmlElements[0];
	xes = root.evaluateXPathExpression("//Title");
	n = xes.length;
	while ( n-- ) {
		nXE = xes[n];
		xc = nXE.xmlContent;
		if ( xc instanceof Story ) {
			strs.push( xc.contents );
		}
	}
	if ( strs.length ) {
		f.open('w');
		f.write ( strs.reverse().join("\r") );
		f.close();
	}
	
}

var u;

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