javascript - InDesign 脚本 : Deleting elements from the structure panel

标签 javascript xml adobe-indesign

我已经在 InDesign 中导入了一些 XML 文件(您可以在下图中看到结构),我还创建了一个脚本来获取有关此层次结构的一些统计信息。

例如,计算“空闲”元素:

var items = app.activeDocument.xmlElements.everyItem();
var items1 = items.xmlElements.itemByName("cars");
var cars = items1.xmlElements.everyItem();
var c_free = cars.xmlElements.itemByName("free");
var cars_free = c_free.xmlElements.count().length;
  • 我的结构中也有公寓,这就是我使用 itemByName 的原因。

上面的代码在我的结构中返回了正确数量的免费汽车。

我想做的 - 到目前为止没有任何运气 - 是针对那些免费元素(车内)并删除所有元素或删除特定数量。

我最后一次尝试使用:

var del1 = myInputGroup2.add ("button", undefined, "Delete All");
del1.onClick = function () {
    cars.xmlElements.everyItem().remove();
}

在我创建的对话框中。

任何建议将不胜感激,因为我真的被困在这里。

Strucure

最佳答案

我可能会为此使用 XPath。您可以使用 evaluateXPathExpression 创建一个包含您要定位的元素的数组。假设您的根元素是 cars 并且它包含名为 cars1 的元素,并且您想要删除 cars1 元素中的所有空闲元素,您可以执行如下操作:

var myDoc = app.activeDocument;
//xmlElements[0] is your root element, in this case "cars". The xPath expression is evaluated from cars.
//evaluateXPathExpression returns an array of all of the free elements that are children of cars. 
var myFrees = myDoc.xmlElements[0].evaluateXPathExpression("cars1/free");
for (var i = myFrees.length - 1; i>=0; i--){
    myFrees[i].remove();
}

调整它需要一些 xPath 知识,但学习基础知识并不难,而且它看起来确实是最简单的方法。

关于javascript - InDesign 脚本 : Deleting elements from the structure panel,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28194596/

相关文章:

javascript - 每个项目都有特定的名称

javascript - 使用 CryptoJS 的 Java SHA-1 到 javascript

xml - 使用XML和R有效地获取具有特定名称的子代数

javascript - 将本 map 片导入XML以供跨平台应用程序使用

java - Cassandra 数据库 : Storing XML-Files in Cassandra Database possible?

javascript - 是否可以使用 Indesign javascript 调用 Web 服务?

javascript - 删除字符串之间的破折号并在 Javascript 中将字符串大写

javascript - 如何只运行一次 vue 计算属性?

javascript - JavaScript 中的 OnClick 函数

javascript - Adobe 套接字对象不适用于代理