如何从 .xml 获取单个值

How to get single value from .xml

我有一些 xml 或 excel 我想在 InDesign 脚本中遍历此文档并在定义的位置插入值 这是 excel 或 xml

这个我想得到

我没有那么多脚本编写经验,所以只能写这段代码

var doc = app.activeDocument;
var myFile = File("~/Desktop/test.xml");
var textExcel = doc.textFrames.add();
textExcel.geometricBounds = [50, 80, 10, 150];
textExcel.place(myFile);

但现在我如何才能获得单个值?例如在 indesign 模板中,第一段应该看起来像 table --> lorem--> 150

您或许可以使用 xpath 和 Document 来完成此操作。 https://developer.mozilla.org/en-US/docs/Web/API/Document/evaluate

您使用 xml 创建一个新文档并计算 xPath。

以下是可能的解决方案:

var doc = app.activeDocument;

// get a text from the XLSX file
var inputFile = File("d:/table.xlsx");
var temp_frame = doc.textFrames.add();
temp_frame.place(inputFile);
var text = temp_frame.parentStory.contents;
temp_frame.remove();

// make a table from the text
var rows = text.split('\r');
var table = [];
for (var i = 1; i < rows.length; i++) table.push(rows[i].split('\t'));

// loop through the table and make the cards
for (var i = 0; i < table.length; i++) {

    var title       = table[i][0];
    var description = table[i][1];
    var price       = table[i][2];

    var card = make_card(title, description, price);

    // move the card to some places
    card.move([10,10]);
    card.move(undefined, [i*75, 0]);
}

// the function to create and return a card
function make_card(title, description, price) {
    var doc = app.activeDocument;

    var title_frame = doc.textFrames.add();
    title_frame.geometricBounds = [20, 80, 30, 150];
    title_frame.contents = title;

    var description_frame = doc.textFrames.add();
    description_frame.geometricBounds = [30, 80, 80, 150];
    description_frame.contents = description;

    var price_frame = doc.textFrames.add();
    price_frame.geometricBounds = [80, 80, 100, 150];
    price_frame.contents = price;

    // apply styles to the texts in the card
    apply_style('title', title_frame);
    apply_style('description', description_frame);
    apply_style('price', price_frame);

    var group = doc.groups.add([title_frame, description_frame, price_frame]);
    return group;
}

function apply_style(style_name, frame) {
    var doc = app.activeDocument;
    try {
        var style = doc.paragraphStyles.itemByName(style_name);
        frame.paragraphs.everyItem().appliedParagraphStyle = style;
    } catch(e) {}
}

这是 XLSX table:

这是结果布局(3 张牌):

它从 XLSX 文件创建卡片(将样式应用于卡片内的文本,为什么不呢?)并将它们放在当前文档的页面上。