Mozilla JavaScriptインターフェイスを使用したXSL変換

このドキュメントでは、Mozilla 1.2 の JavaScript インターフェイスと、XSLT 処理エンジン (TransforMiiX) について説明します。

XSLTProcessorの作成

まず、XSLTProcessor オブジェクトを作成する必要があります。

var processor = new 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);

結果のオブジェクトはスタイルシートの出力メソッドに依存します。

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);

関連情報

オリジナルドキュメント情報

  • 著者: Mike Hearn
  • 最終更新日: December 21, 2005
  • 著作権情報: Copyright (C) Mike Hearn

ドキュメントのタグと貢献者

タグ: 
このページの貢献者: silverskyvicto, ethertank, kohei.yoshino, Mgjbot
最終更新者: silverskyvicto,