Mozilla JavaScriptインターフェイスを使用したXSL変換
このドキュメントでは、Mozilla 1.2 の JavaScript インターフェイスと、XSLT 処理エンジン (TransforMiiX) について説明します。
XSLTProcessorの作成
まず、XSLTProcessor
オブジェクトを作成する必要があります。
スタイルシートの指定
これを使用するには、XSLTProcessor.importStylesheet()
メソッドを使用してスタイルシートをインポートする必要があります。インポートするXSLTスタイルシートのDOMノードである単一のパラメータがあります。
注:
インポートは動的です。つまりスタイルシートDOMを読み込んだ後にスタイルシートDOMを変更すると、処理に反映されます。DOMを変更するのではなく、通常はより簡単でより良いパフォーマンスを与えることができるスタイルシートパラメータを使用することをお勧めします。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()
には引数、つまり DOM ノードが1つ必要です。そのノードがドキュメントノードの場合、完全なXSL Transformまたはリテラル結果要素の変換を渡すことができます。そうでない場合は、xsl:stylesheet
または xsl:transform
要素でなければなりません。
文書を変形する
インポートした XSLT スタイルシートを使用して XSLTProcessor.transformToDocument()
または XSLTProcessor.transformToFragment()
メソッドを使用してドキュメントを変換できます。
transformToDocument
XSLTProcessor.transformToDocument()
は変換するソースノードを1つ引数として、変換結果とともに新しい Document
を返します。
var newDocument = processor.transformToDocument(domToBeTransformed);
結果のオブジェクトはスタイルシートの出力メソッドに依存します。
- html -
HTMLDocument
- xml -
XMLDocument
- text - 子としてのテキストを持つ単一のルート要素
<transformiix:result>
を持つXMLDocument
transformToFragment
DocumentFragment
ノードを返す XSLTProcessor.transformToFragment()
を使用することもできます。フラグメントを別のノードに追加すると、そのフラグメントのすべての子が透過的に追加され、フラグメント自体はマージされないため、これは便利です。したがってフラグメントは、完全なドキュメントオブジェクトのオーバーヘッドなしにノードを移動して格納するのに便利です。
XSLTProcessor.transformToFragment()
は、変換するソースドキュメント (上記) とフラグメントを所有する Document
オブジェクトの2つの引数をとります (すべてのフラグメントは文書が所有しなければなりません) 。
var ownerDocument = document.implementation.createDocument("", "test", null);
var newFragment = processor.transformToFragment(domToBeTransformed, ownerDocument);
所有者文書自体が HTMLDocument
の場合、またはスタイルシートの出力メソッドがHTMLの場合、XSLTProcessor.transformToFragment()
は HTML DOM オブジェクトを生成します。これは、XSLTProcessor.transformToFragment()
がこの要素の作成に使用されることはほとんどないので、結果の最上位要素のみが <html>
の場合、HTML DOMオブジェクトを生成しません。これをオーバーライドする場合は、通常の方法で出力メソッドを通常どおりに設定できます。
transforming HTML
残念ながら、XSLT を使用して HTML ノードを変換することは現在サポートされていません。パターンや式で小文字のノード名を使用してノードがnull名前空間にあるかのように扱う場合、いくつかのことが成り立ちますが、これはあまりうまくテストされていないため、すべての状況で機能しない可能性があります。これは将来のリリースで変更される可能性もあります。
しかし XHTML の変換は期待通りに機能するはずです。
パラメータの設定
スタイルシートのパラメータはXSLTProcessor.setParameter()
、XSLTProcessor.getParameter()
、XSLTProcessor.removeParameter()
メソッドを使用して制御することができます。これらはすべて XSLTProcessor.setParameter()
が設定するパラメータの値の3分の1を使用して、名前空間URIとローカル名を最初の2つのパラメータとして取ります。例については、Gecko の XSLT/JavaScript インターフェースを参照してください。
リセット
XSLTProcessor
オブジェクトは、すべてのスタイルシートとパラメータを削除してプロセッサを初期状態に戻すために使用できるXSLTProcessor.reset()
メソッドも実装しています。このメソッドは Mozilla 1.3 以降で実装されています。
リソース
以下は XSLTProcessor
オブジェクトのインタフェースを反映しています:
XPCOM コンポーネントから XSLTProcessor を使用する
XPCOMコンポーネントから XSLTProcessor
をインスタンス化するには、コンストラクタがコンポーネント内で定義されていないため、別の構文が必要です。
これの代わりに:
var processor = new XSLTProcessor();
これを行います:
var processor = Components.classes["@mozilla.org/document-transformer;1?type=xslt"]
.createInstance(Components.interfaces.nsIXSLTProcessor);
関連情報
- Gecko の XSLT/JavaScript インターフェース
- XML文書の読み込みに関するdocument.load() (上で使用したもの)
オリジナルドキュメント情報
- 著者: Mike Hearn
- 最終更新日: December 21, 2005
- 著作権情報: Copyright (C) Mike Hearn