【问题标题】:Linking XML elements to page items in InDesign在 InDesign 中将 XML 元素链接到页面项目
【发布时间】:2015-05-29 01:12:02
【问题描述】:

我可以像这样检查所选文本的 XML:

app.selection[0].associatedXMLElements[0];

但在我的研究中,我仍然对如何使用脚本对 XML 做最基本的事情摸不着头脑:如何将 XML 分配给项目?我可以通过打开结构窗格手动执行此操作,然后将元素拖到页面上所需的框架上。如果这可能是老式的方式,我想它是可能的脚本。

  • 如何将现有 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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-08-27
    • 2021-01-31
    • 1970-01-01
    • 2012-09-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多