Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript InDesign脚本:从结构面板中删除元素_Javascript_Xml_Adobe Indesign - Fatal编程技术网

Javascript InDesign脚本:从结构面板中删除元素

Javascript InDesign脚本:从结构面板中删除元素,javascript,xml,adobe-indesign,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 = ca

我已经在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();
}
在我创建的对话框中

任何建议都将被感激,因为我真的被困在这里了


我可能会为此使用XPath。可以使用EvaluatePathExpression创建要作为目标的元素数组。假设您的根元素是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知识,但学习基础知识并不十分困难,而且这似乎是最简单的方法。

我认为您的主要问题是XMLElements没有itemByName方法。只能通过其索引或ID引用XMLElements

其次,假设您从XPath表达式中获得了xmlElements,但很可能什么都没有,因为您的XPath似乎不正确

var myFrees=myDoc.xmlements[0].EvaluatePathExpression(“./cars1/free”);
var n=myFrees.length;
如果(!n){
警报(“Aucunélément trouvé”);
}
否则{
而(n--)myFrees[n].remove();

}
感谢您的回复!我使用以下表达式成功地获得了正确的XPath:var cars_free_array=app.activeDocument.xmlElements[0]。evaluatePathExpression(“cars/*[以(local-name(),'cars')]/free开头”);我还添加了一个警报来查看这个数组的长度,它与我瞄准的自由元素的数量相匹配。但是,remove()函数不起作用。对于(var i=0;i