Copy link to clipboard
Copied
Hi Everyone,
It would be helpful for me to get a count of the CDATA content in the XML file. For your convenience, I have attached the script I used to get the CDATA and InDesign content.
var allCDATA = [];
myXMl = app.activeDocument.xmlElements[0];
var myXmlNode = myXMl.evaluateXPathExpression("//Root");
var myFrame = app.activeDocument.textFrames;
app.findChangeGrepOptions = NothingEnum.nothing;
app.findGrepPreferences = NothingEnum.nothing;
for (var i = 0; i<myFrame.length; i++) {
var mySelectedXMLItem = myFrame[i].associatedXMLElement;
if(mySelectedXMLItem != null && mySelectedXMLItem.markupTag.name != null)
{
var node_TBGUID = myFrame[i].associatedXMLElement.xmlAttributes.itemByName("TBGUID").value;
var myFrames = myFrame[i].texts[0].contents;
var xmlTree = GetXMLFile();
var content = new XML(xmlTree);
var myDoc = app.activeDocument;
myLinks = myDoc.links;
for (j = myLinks.length - 1; j >= 0; j--)
{
myName = myLinks[j].filePath;
var ext = myName.substring(myName.length-3,myName.length) ;
if (ext=="xml")
{
var myXMLFile = File(myName);
var myResult = myXMLFile.open("r", undefined, undefined);
if(myResult == true){
var myXMLDefaults = myXMLFile.read();
myXMLFile.close();
} // if(myResult)
} // if(ext)
} // for
var elements =getAllAttributeValues ("TBGUID");
//alert(elements)
for(var k = 0;k<elements.length;k++)
{
if(elements[k] == node_TBGUID)
{
var getxmlcontent = getCDATAWithID(myXMLFile, "TBGUID", elements[k]); // Get the CDATA values
var testL=myFrames;
alert(testL)
var testR=getxmlcontent.toString().replace("<br />","").replace("<br />","").replace("<br />","");
alert(testR)
} ///// elements[k] == node_TBGUID
} //// for (k)
}
} // first for loop
function GetXMLFile()
{
myDoc = app.activeDocument;
myLinks = myDoc.links;
for (j = myLinks.length - 1; j >= 0; j--)
{
myName = myLinks[j].filePath;
var ext = myName.substring(myName.length-3,myName.length) ;
if (ext=="xml")
{
var myXMLFile = File(myName);
var myResult = myXMLFile.open("r");
if(myResult == true)
{
var myXMLDefaults = myXMLFile.read();
myXMLFile.close();
var myXMLDefaults = new XML(myXMLDefaults);
return myXMLDefaults;
}
}//for
}
}
function getAllAttributeValues(attributeName){
var allAttributes = [];
var allNodes = content[0].xpath("//*[@"+attributeName+"]");
for(var i = 0; i < allNodes.length(); i++){
allAttributes.push(allNodes[i].attribute(attributeName).toString());
}
if(allAttributes.length > 0){
// alert(allAttributes)
// getChildData(allAttributes)
return allAttributes;
}
else{
return null;
}
}
function getChildData(nodeData){
for(var c = 0; c < nodeData.children().length(); c++){
if(nodeData.children()[c].toXMLString().toString().indexOf("<![CDATA[") == 0){
// alert(nodeData.children()[c].toString());
allCDATA.push(nodeData.children()[c].toString());
}
if(nodeData.children()[c].children().length() > 0){
getChildData(nodeData.children()[c]);
}
}
}
function getCDATAWithID(inputXML, attribute, id){
var CDATA = [];
if(inputXML.exists == true) {
inputXML.encoding = "UTF-8";
inputXML.open('r');
var text = inputXML.read();
inputXML.close();
var content = new XML(text);
var elements = content.xpath("//CDATA");
for(var n = 0; n < elements.length(); n++){
if(elements[n].parent()["@"+attribute].toString() == id){
CDATA.push(elements[n].toString());
// alert(CDATA)
}
}
}
return CDATA;
}
Have something to add?