Exit
  • Global community
    • Language:
      • Deutsch
      • English
      • Español
      • Français
      • Português
  • 日本語コミュニティ
  • 한국 커뮤니티
0

Open XML and using xslt with JavaScript

Guest
Apr 22, 2011 Apr 22, 2011

Hello,

I want the user to be able to choose an XML-file. This XML-file should not be placed in InDesign, there is not even a document needed for my script. All I need is a variable, containing the file. However, the XML-file should be transformed with xslt into another XML-file. How do I do this?

This is how I open the first XML-file, the one that should be transformed:

   var xmlDoc = File.openDialog ("Choose XML");
   if (xmlDoc == null) {return;}
    xmlDoc.open("r");
    xmlDoc = xmlDoc.read();

    xmlDoc = new XML(xmlDoc);


I can adress different nodes and use xmlDoc as an XML-file, so that's fine, but how do I transform it?

I read the Scripting Guide and tried this:

    var myDocument = app.documents.add();

    var myXMLImportPreferences = app.xmlImportPreferences;

    myXMLImportPreferences.transformFilename = "c:\myTransform.xsl";

    var xx = myDocument.importXML(File.openDialog ("XML"));

However, it's not exactly what I want since I have to create a document and it's not working either, since xx stays undefined.

Thanks for your help.

TOPICS
Scripting
3.0K
Translate
Report
Community guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
community guidelines
LEGEND ,
Apr 22, 2011 Apr 22, 2011

You can't get exactly what you want.

Your first code example uses the InDesign JavaScript interpreter's XML support, called E4X. It has absolutely nothing to do with the InDesign document object model or InDesign's internal support for XML. It exists only within the JavaScript interpreter. It does not support XSLT transformations.

Your second example leverages InDesign's built-in XSLT support (I'm not too sure how this works...); but that is only useful when importing XML into

InDesign, which, as you have learned, requires a document.

In the first example, you could call out to an external invokation of xsltproc and read in the input. How to do that differs for Windows and Mac.

In the second example, you could export the XML from your Document back out to an XML file and read it back in with E4X.

None of this is very appealing. What do you really need to do?

Translate
Report
Community guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
community guidelines
Guest
Apr 22, 2011 Apr 22, 2011

Thanks for your answer.

I want to find out if some xml-elements are part of the transformed xml-file. I don't want the users to transform the file with some editor themself, because I'm afraid this might confuse them.

If one of the searched xml-elements is part of the transformed xml-file, it's written into a txt-file. However, it would propably be easier to work with the second idea, considering that each xml-element will later be translated into a paragraph style, which can be added to a new document. So basically one could say, I want to create a template based on the transformed xml-file. Also I'm not sure, which os will be used later, I'm working with windows right now.

Translate
Report
Community guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
community guidelines
New Here ,
Sep 04, 2012 Sep 04, 2012

I'm trying to import xml, with a xsl transformation.

And I'm using something similar to you : fixing the xmlimport preferences, etc

Importing by the menu works. Importing with javascript doesn't work. I can see my xml file imported, but without any modification (described in the xsl file).

Is it possible to import xml files, with xslt tranformation through a javascript script?

Thank you

Didier

Translate
Report
Community guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
community guidelines
New Here ,
Sep 04, 2012 Sep 04, 2012

Hi,

After impoting the xml try this!!!

myDocument.xmlImportPreferences.allowTransform = true;

myDocument.xmlImportPreferences.transformFilename = File("........................");\\give your xslt path

myDocument.xmlImportPreferences.importStyle = XMLImportStyles.MERGE_IMPORT;

myDocument.xmlImportPreferences.repeatTextElements = true;

myDocument.xmlImportPreferences.importCALSTables = true;

myDocument.xmlImportPreferences.importTextIntoTables = true;

myDocument.xmlImportPreferences.removeUnmatchedExisting = false;

But make sure your xslt should be xml version="1.0"

Thanks,

love_all

Translate
Report
Community guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
community guidelines
New Here ,
Sep 05, 2012 Sep 05, 2012
LATEST

Thank you,

I tried that.

But before or after, no modifications...

And the xsl file is ok (I can import "by hand" with the menu import xml).

Arg

Translate
Report
Community guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
community guidelines