Как добавить содержимое в элемент xml?

Мне нужно вставить слово sqrt(обычный текст без тегов) в элементе xml m:msqrt как ниже:

Я старался:

var path = (app.activeDocument.fullName.parent.fsName).toString().replace(/\\/g, '/');
//path of active document(sample.indd)

var xmlPath = (app.activeDocument.fullName.parent.fsName).toString().replace(/\\/g, '/')+"/with_aid2.xml";

xmlFile = File (xmlPath);

if(xmlFile.exists){
    xmlFile.open();
    var myString = xmlFile.read();
    xmlFile.close();
    myXml = new XML ();
    myXml = XML(myString);
    var msqrtCount = myXml.xpath("//m:msqrt");

}else{alert(xmlPath+" doesn't exist!");}

for(var i=0;i<msqrtCount.length();i++){  
    var added =    msqrtCount[i];
    added.contents="sqrt";       
}

Я получаю сообщение об ошибке говорит, что недопустимое содержание

1 ответ

Я не совсем понимаю. Вы пытаетесь добавить текст в документ InDesign или в файл XML, который импортируете в документ InDesign? Представленный вами код, по-видимому, обращается к файлу XML, загружает его в память и затем пытается добавить текст к тегу в файле XML. Я бы справился с этим вне InDesign, если это ваша цель.

Если вы хотите добавить текст в отмеченную область в документе InDesign, используйте обработку правил XML, как показано ниже:

#include "glue code.jsx"

var myDocument = app.activeDocument;
addContent(myDocument, "new content");

function addContent(myDocument, myContent){
    var myRuleSet = new Array(new addContentToTag);

    with(myDocument){
        var elements = xmlElements;
        __processRuleSet(elements.item(0), myRuleSet);
    }

    function addContentToTag(){
        this.name = "addContentToTag";
        this.xpath = "/Root/Story/Tag";
        this.apply = function(myElement, myRuleProcessor){
                myElement.contents = myContent;
                return true;
        };
    }
}

(Обратите внимание, что файл glue code.jsx включен. Он должен находиться в каталоге сценариев, чтобы обработка правил XML работала правильно).

Другие вопросы по тегам