Process XML Data for InDesign
This script uses XML files as a sort of database for creating InDesign files from templates.
for (var x = 0; x < xmlFiles.length; x++) { xmlFile = xmlFiles[x]; currentFolder = xmlFile.parent; currentFolderPath = currentFolder.absoluteURI + "/"; xmlFile.open("r"); xmlStr = xmlFile.read(); xmlFile.close(); root = new XML(xmlStr); default xml namespace = "http://www.forma-studio.com/order"; linksArr = []; copyCount = root.xpath("/order/copy-count"); componentList = root.xpath("/order/product/components/component"); componentsLength = componentList.length(); for (var c = 0; c < componentsLength; c++) { component = componentList[c]; linksArr.push({ name : component.images.image.file_name.toString(), width : parseInt(component.images.image.size.width), height : parseInt(component.images.image.size.height), resolution : parseInt(component.images.image.resolution), }); } montageList = root.xpath("/order/product/montages/montage"); montagesLength = montageList.length(); for (var i = 0; i < montagesLength; i++) { montage = montageList[i]; app.scriptPreferences.userInteractionLevel = UserInteractionLevels.neverInteract; app.open(new File(montage.layout_filename)); doc = app.activeDocument; docFile = new File(outFolderPath + montage.result_filename + ".indd"); doc.save(docFile); app.scriptPreferences.userInteractionLevel = UserInteractionLevels.interactWithAll; targetPagesLength = parseInt(montage.page_count)*copyCount; if (!isNaN(targetPagesLength)) { if( targetPagesLength != 0) { while (doc.pages.length > targetPagesLength) { doc.pages.lastItem().remove(); } } } UpdateAllOutdatedLinks(doc); noErrors = ProcessDoc(doc, linksArr, currentFolderPath); if (noErrors) { destinationFolder = new Folder(montage.destination); VerifyFolder(destinationFolder); pdfPath = montage.destination + "/" + montage.result_filename + ".pdf" pdfFile = new File(pdfPath); backgroundTask = doc.asynchronousExportFile(ExportFormat.PDF_TYPE, pdfFile, false, "[High Quality Print]"); var tasksPanel = app.panels.itemByName("Background Tasks"); if (tasksPanel) tasksPanel.visible = true; successfulDocs.push(doc.name); if (xmlFile.name == "sforder.xml") xmlFile.rename("NoErrorProcecced_" + xmlFile.name); } else { failedDocs.push(doc.name); if (xmlFile.name == "sforder.xml") xmlFile.rename("ErrorProcecced_" + xmlFile.name); } } // for montagesLength } // for xmlFiles
Here is how to set the default namespace:
Click here to download the whole script.