【问题标题】:Don't Add Indesign Tags to the root element?不要将 Indesign 标签添加到根元素?
【发布时间】:2023-04-18 07:03:01
【问题描述】:

以下代码示例:

var myDocument = app.documents.add();
var myTextFrame = myDocument.pages.item(0).textFrames.add();
myTextFrame.geometricBounds = ["6p", "6p", "24p", "24p"];
myTextFrame.contents = "Hello World!";

myBounds = myTextFrame.geometricBounds;


var myX = "" + myBounds[1];
var myY = "" + myBounds[0];

var myTag = myDocument.xmlTags.add("text-area");

var myXMLElement =  myDocument.xmlElements.item(0).xmlElements.add(myTag, myTextFrame);
myXMLElement.xmlAttributes.add("x", myX);
myXMLElement.xmlAttributes.add("y", myY);

这将给出以下xml:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<Root><text-area x="25.4" y="25.4000000000001">Hello World!</text-area></Root>

我可以不显示根标签吗?删除它还是不让它出现在 .xml 中?我搜索了不同的关键字,但找不到解决方案。

提前致谢。

【问题讨论】:

    标签: javascript xml adobe-indesign extendscript


    【解决方案1】:

    默认情况下,每个文档都有一个新的根元素。如果你抓住第一个xmlElement,那就是根元素。下面是一个将 text-area 设置为根元素的更改示例:

    var myDocument = app.documents.add();
    var myTextFrame = myDocument.pages[0].textFrames.add();
    myTextFrame.geometricBounds = ["6p", "6p", "24p", "24p"];
    myTextFrame.contents = "Hello World!";
    
    var myRootElem = myDocument.xmlElements[0];
    myRootElem.markupTag.name = "text-area";
    
    var myBounds = myTextFrame.geometricBounds;
    var myX = "" + myBounds[1];
    var myY = "" + myBounds[0];
    
    myRootElem.xmlAttributes.add("x", myX);
    myRootElem.xmlAttributes.add("y", myY);
    
    myTextFrame.markup(myRootElem);
    

    【讨论】:

    • 好吧,这最终可能会奏效。这是否仅适用于每个文档,或者也适用于文档中的每个页面?
    • 看起来不可能。尝试添加多个根元素时,InDesign 会给出错误消息。
    • 该死...谢谢你的回答,我会竖起大拇指:P
    • 仅供参考; InDesign 拒绝这一点是正确的。格式良好的 XML 树具有“包含所有其他元素的单个“根”元素”:请参阅 Document 下的 the Offical Definition of well-formednessness,第 2 项。
    • 但在这种情况下,这正是你不能这样做的确切原因。 (老实说,InDesign几乎可以处理 XMl。例如,它超级方便的内置 XSLT 受到严重限制。)