【问题标题】:Linking XML elements to page items in InDesign在 InDesign 中将 XML 元素链接到页面项目
【发布时间】:2015-05-29 01:12:02
【问题描述】:
我可以像这样检查所选文本的 XML:
app.selection[0].associatedXMLElements[0];
但在我的研究中,我仍然对如何使用脚本对 XML 做最基本的事情摸不着头脑:如何将 XML 分配给项目?我可以通过打开结构窗格手动执行此操作,然后将元素拖到页面上所需的框架上。如果这可能是老式的方式,我想它是可能的脚本。
【问题讨论】:
-
顺便说一句,根据我的经验,生成 XHTML 或 Docbook XML 然后使用 pandoc 转换为 InDesign ICML...
标签:
javascript
xml
adobe-indesign
extendscript
【解决方案1】:
您可以参考您的 xml 节点和您的文本框架并使用 placeXML
myXMl = myDoc.xmlElements[0];
var myXmlNode = myXMl.evaluateXPathExpression("/myXML/node1")[0];
var myFrame = app.activeDocument.pages[0].textFrames[0];
myXmlNode.placeXML(myFrame);
这种方法的优点是任何aid:pstyle 或aid:cstyle 都会自动链接到现有的匹配样式
另一种方法是选择节点的值作为文本并将其放入文本框中的插入点:
myXMl = myDoc.xmlElements[0];
var myText = myXMl.xpath("/myXML/node1[1]/text()");
var myFrame = app.activeDocument.pages[0].textFrames[0];
myFrame.parentStory.insertionPoints[-1].contents = myText + '\r';
【解决方案2】:
有两个特定的属性。 AssociatedXMLElement 用于包含 textFrame 的 pageItems,如果未应用标签,则可能为 null。 AssociatedXMLElements 仅适用于文本对象(字符、单词……),因为它们可以应用多个标签。请注意,未标记的文本返回一个空数组而不是 null。
将标签与 pageItems 相关联要求您首先创建或定位现有的 xmlElements,然后使用 myInDesignObject.markup (myXMLElement)。
一旦您想浏览您的 XML 结构,按照 Nicolai 的建议评估 XPathExpression 会很有趣。但有时从对象中调查关联的 XMLElement 确实比调查 xml 结构更快。
FWIW