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

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

XSLTProcessor の作成

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

const processor = new XSLTProcessor();

スタイルシートの指定

これを使用するには、 XSLTProcessor.importStylesheet() メソッドを使用してスタイルシートをインポートする必要があります。これには単一の引数があり、インポートする XSLT スタイルシートの DOM ノードを指定します。

メモ: インポートはライブです。つまりインポート後にスタイルシートの DOM を変更すると、処理に反映されます。 DOM を変更するよりも、スタイルシートの引数を使用することが推奨されています。通常より簡単に、より良いパフォーマンスを得ることができます。

const testTransform = document.implementation.createDocument("", "test", null);

// DOM としてスクリプトに変換を取得する例です
// XMLDocument.load は非同期なので、すべての処理が onload ハンドラーで
// 行われる
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 要素でなければなりません。

文書の変換

XSLTProcessor.transformToDocument() または XSLTProcessor.transformToFragment() メソッドを使用すると、インポートされた XSLT スタイルシートを使用して文書を変換することができます。

transformToDocument

XSLTProcessor.transformToDocument() は変換するソースノードを1つ引数として、変換結果とともに新しい Document を返します。

const newDocument = processor.transformToDocument(domToBeTransformed);

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

transformToFragment

XSLTProcessor.transformToFragment() を使用することもでき、こちらは DocumentFragment ノードを返します。フラグメントを別のノードに追加すると、そのフラグメントのすべての子が透過的に追加され、フラグメント自体はマージされないため、これは便利です。したがってフラグメントは、完全な文書オブジェクトのオーバーヘッドなしにノードを移動して格納するのに便利です。

XSLTProcessor.transformToFragment() は、変換するソース文書(上記)とフラグメントを所有する Document オブジェクトの 2 つの引数をとります(すべてのフラグメントは文書が所有しなければなりません)。

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

XSLTProcessor.transformToFragment() は、所有文書自体が HTMLDocument の場合、またはスタイルシートの出力メソッドが HTML の場合、 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() メソッドも実装しています。このメソッドは Gecko 1.3 以降で実装されています。

リソース

以下のものは XSLTProcessor オブジェクトのインターフェイスを反映しています。

関連情報

原著情報

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