在indesign中重复通过XML替换内容

时间:2017-11-06 14:04:43

标签: xml adobe-indesign extendscript

我有一个脚本替换Indesign中的所有内容,我在表格单元格中标记了这些内容,效果很好。唯一缺少的是当我为2个单元格提供相同的标签时,脚本只替换它找到的第一个标签的内容。 所以我希望脚本替换具有相同标签的每个内容。 有没有人知道如何实现这个目标?

var main = function() {
    var doc = app.properties.activeDocument,
    root, xe, price,
    tags = <tags>

<PVDF8HNAPK40>100</PVDF8HNAPK40>
<PVDF8HNAPK50>100</PVDF8HNAPK50>
<PVDF8HNAPK63>100</PVDF8HNAPK63>
<PVDF8HNAPK75>100</PVDF8HNAPK75>

</tags>, tag, xes;


    if ( !doc ) return;

    root = doc.xmlElements[0];

    tags = tags.children(), n = tags.length();

    while ( n-- ) {
        tag = tags[n];
        xes = root.evaluateXPathExpression ( ".//"+ String(tag.name()) );
        if ( xes.length ) {
            xe = xes[0];
            xe.contents = String(tag).replace (/\./g, "," );

        }
    }
}


var u;

app.doScript ( "main()",u,u,UndoModes.ENTIRE_SCRIPT, "The Script" );

1 个答案:

答案 0 :(得分:0)

看起来你需要的只是另一个循环。为了使事情顺利,我也用while循环取代了外for循环。

var main = function() {
    var doc = app.properties.activeDocument,
    root, xe, price, tag, xes,
    tags = <tags>
        <PVDF8HNAPK40>100</PVDF8HNAPK40>
        <PVDF8HNAPK50>100</PVDF8HNAPK50>
        <PVDF8HNAPK63>100</PVDF8HNAPK63>
        <PVDF8HNAPK75>100</PVDF8HNAPK75>
    </tags>;

    if ( !doc ) return;

    root = doc.xmlElements[0];
    tags = tags.children();

    for (var t = 0; t < tags.length(); t++) {
        tag = tags[t];
        xes = root.evaluateXPathExpression ( ".//"+ String(tag.name()) );
        for (var i = 0; i < xes.length; i++) {
            xe = xes[i];
            xe.contents = String(tag).replace (/\./g, "," );
        }
    }
}

var u;
app.doScript ( "main()",u,u,UndoModes.ENTIRE_SCRIPT, "The Script" );

免责声明:我没有InDesign。这是未经测试的代码。