Using the Mozilla JavaScript interface to XSL Transformations - XSLT: Extensible Stylesheet Language Transformations 编辑

This document describes the JavaScript interface in Mozilla 1.2 and up to the XSLT Processing Engine (TransforMiiX).

Creating an XSLTProcessor

To start, you need to create an XSLTProcessor object:

var processor = new XSLTProcessor();

Specifying the stylesheet

Before you can use it, you must import a stylesheet with the XSLTProcessor.importStylesheet() method. It has a single parameter, which is the DOM Node of the XSLT stylesheet to import.

Note:

The import is live, meaning that if you alter the stylesheet DOM after importing it, this will be reflected in the processing. Rather than modifying the DOM it is recommended to use stylesheet parameters which are usually easier and can give better performance.
var testTransform = document.implementation.createDocument("", "test", null);
// just an example to get a transform into a script as a DOM
// XMLDocument.load is asynchronous, so all processing happens in the
// onload handler
testTransform.addEventListener("load", onload, false);
testTransform.load("test-transform.xml");
function onload() {
  processor.importStylesheet(testTransform);
}

XSLTProcessor.importStylesheet() requires one argument, a DOM Node. If that node is a document node, you can pass in a full XSL Transform or a literal result element transform, otherwise it must be an xsl:stylesheet or xsl:transform element.

Transforming the document

You can use the XSLTProcessor.transformToDocument() or XSLTProcessor.transformToFragment() methods to transform a document using the imported XSLT stylesheet.

transformToDocument

XSLTProcessor.transformToDocument() takes one argument, the source node to transform, and returns a new Document with the results of the transformation:

var newDocument = processor.transformToDocument(domToBeTransformed);

The resultant object depends on the output method of the stylesheet:

transformToFragment

You can also use XSLTProcessor.transformToFragment() which will return a DocumentFragment node. This is handy because appending a fragment to another node transparently appends all the children of that fragment, and the fragment itself is not merged. Fragments are therefore useful for moving nodes around and storing them without the overhead of a full document object.

XSLTProcessor.transformToFragment() takes two arguments: the source document to be transformed (as above) and the Document object that will own the fragment (all fragments must be owned by a document).

var ownerDocument = document.implementation.createDocument("", "test", null);
var newFragment = processor.transformToFragment(domToBeTransformed, ownerDocument);

XSLTProcessor.transformToFragment() will only produce HTML DOM objects if the owner document is itself an HTMLDocument, or if the output method of the stylesheet is HTML. It will not produce an HTML DOM objects if only the toplevel element of the result is <html> as XSLTProcessor.transformToFragment() is rarely used to create this element. If you want to override this, you can set the output method normally in the standard way.

transforming HTML

Unfortunately it is currently not supported to transform HTML nodes using XSLT. Some things work if you use lower case node-names in patterns and expressions, and treat the nodes as if they are in the null namespace, however this is not very well tested so it might not work in all situations. It is also possible that this will change in a future release.

Transforming XHTML should work as expected though.

Setting parameters

You can control parameters for the stylesheet using the XSLTProcessor.setParameter(), XSLTProcessor.getParameter(), and XSLTProcessor.removeParameter() methods. These all take a namespace URI and a local name as the first two parameters, with XSLTProcessor.setParameter() taking a third - the value of the parameter to be set. See The XSLT/JavaScript Interface in Gecko for an example.

Resetting

The XSLTProcessor object also implements a XSLTProcessor.reset() method, which can be used to remove all stylesheets and parameters then put the processor back into its initial state. This method is implemented in Mozilla 1.3 and later.

Resources

The following reflect the interface of the XSLTProcessor object:

Using XSLTProcessor from XPCOM components

Instantiating an XSLTProcessor from an XPCOM component requires a different syntax as the constructor is not defined inside components.

Instead of this:

var processor = new XSLTProcessor();

Do this:

var processor = Components.classes["@mozilla.org/document-transformer;1?type=xslt"]
                          .createInstance(Components.interfaces.nsIXSLTProcessor);

See also

Original Document Information

  • Author(s): Mike Hearn
  • Last Updated Date: December 21, 2005
  • Copyright Information: Copyright (C) Mike Hearn

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据

词条统计

浏览:99 次

字数:11092

最后编辑:7 年前

编辑次数:0 次

    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文