Hi,
I was wondering if any of you have experience with writing XSL scripts
for XMetal2.1 , for preview in HTML function? I am trying to write a XSL
script for this purpose and I would like to know how I can pass
parameters to XSL script, so that I can view the HTML output for a
specific page, instead of seeing the whole document.
Thanks for your help.
Cihan
---------XSL Script---------
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
version="1.0">
<xsl:param name="moduleNum"/>
<xsl:param name="sectionNum"/>
<xsl:param name="screenNum"/>
-------------------------------------------------------------------
JavaScript Macro I use within XMetal
-------------------------------------------------------------------
// This macro gets called when the user has selected Page Preview view,
// or Preview in Browser. The BrowserURL property is the URL that
will
// be passed to the browser. On entry, it contains the URL of a
temporary
// copy of the XML file being edited. We apply an XSLT stylesheet to
create
// an HTML file and set BrowserURL to be the path to this file.
// This macro illustrates the use of the MSXML component to do an
// XSL transformation. Note that the version of MSXML that ships
// with IE5 is not compliant with the final recommendation of the
// W3C XSLT working group.
function doOnBeforeDocumentPreview() {
// Load the XML document into MSXML
var result = "";
var xmlurl = ActiveDocument.BrowserURL;
try {
var xmldoc = new ActiveXObject("MSXML2.DOMDocument");
}
catch(exception) {
result = reportRuntimeError("Page Preview Error:", exception);
Application.Alert(result + "\nYou need to get the latest version of
MSXML from the Microsoft site.");
ActiveDocument.BrowserURL = "";
return;
}
xmldoc.async = false;
xmldoc.validateOnParse = false;
xmldoc.load(xmlurl);
// Load the XSL stylesheet
try {
var xsldoc = new ActiveXObject("MSXML2.DOMDocument");
}
catch(exception) {
result = reportRuntimeError("Page Preview Error:", exception);
Application.Alert(result + "\nFailed second use of MSXML.");
ActiveDocument.BrowserURL = "";
return;
}
var xslurl = Application.PathToUrl(Application.Path +
"\\Display\\course.xsl");
xsldoc.async = false;
xsldoc.load(xslurl);
var htmlout = "";
var errPos = "NOERROR";
if (xmldoc.parseError.errorCode != 0) {
result = reportParseError(xmldoc.parseError);
errPos = "XML";
}
else
{
if (xsldoc.parseError.errorCode != 0) {
result = reportParseError(xsldoc.parseError);
errPos = "XSL";
}
else
{
try {
htmlout = xmldoc.transformNode(xsldoc);
}
catch (exception) {
result = reportRuntimeError("Page Preview Error:", exception);
errPos = "TRANSFORMNODE";
}
}
}
if (result != "") {
Application.Alert(errPos + " : " + result);
ActiveDocument.BrowserURL = "";
return;
}
// Get name of HTML file for output
// If the doc is not saved, set the temp file path to "Document".
var strTempFilePath;
if ( ActiveDocument.Path ) {
strTempFilePath = ActiveDocument.Path;
} else {
strTempFilePath = Application.Path + "\\Document";
}
// Create the document property for PreviewTempFile.
var ndlProperties = ActiveDocument.CustomDocumentProperties;
var ndProperty = ndlProperties.item( "PreviewTempFile" );
// Reuse an existing temp file, or create a new one.
var strTempName;
if ( ndProperty ) {
strTempName = ndProperty.value;
} else {
strTempName = Application.UniqueFileName( strTempFilePath, "XM",
"htm" );
ndlProperties.Add ( "PreviewTempFile", strTempName );
}
// HTML output path is the temp file.
var htmPath = strTempName;
// Write the resulting HTML
try {
var fso = new ActiveXObject("Scripting.FileSystemObject");
}
catch(exception) {
result = reportRuntimeError("Page Preview Error:", exception);
Application.Alert(result + "\nFailed to invoke
Scripting.FileSystemObject\nYou need to get Windows Scripting Host from
the Microsoft site.");
ActiveDocument.BrowserURL = "";
fso = null;
return;
}
var ArgOverwrite = true;
var ArgUnicode = true;
if (Application.UnicodeSupported == false) {
ArgUnicode = false;
}
tf = fso.CreateTextFile(htmPath, ArgOverwrite, ArgUnicode);
tf.Write(htmlout);
tf.Close();
// Change the URL to be sent to the browser to the HTML output file
var htmURL = Application.PathToURL(htmPath);
ActiveDocument.BrowserURL = htmURL;
fso = null;
}
doOnBeforeDocumentPreview();
------------------------------------------------------------------------
--------------------------------------------
XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list