0

私は Java で XSL テンプレートを使用しており、Java コードを呼び出すカスタム タグを作成して、結果をテンプレート内に配置しようとしています。XML エンジンとして XOM を使用しています。私は XOM と XSL の両方に慣れていないので、これが賢明なアイデアかどうかさえわかりません。

私がやりたいことの非常に簡単な例はこれですmy_ns。メソッドが「custom_tag」を持つカスタム名前空間ですcustom tag

<xsl:template name="foo">
 <my_ns:custom_tag />
</xsl:template>

public Node custom_tag() {
  return Node("<a/>");
}

#result of calling the template foo
<a/>

私は、XSL テンプレートから Java を呼び出す別の方法に関する提案を受け付けています。

4

1 に答える 1

3

これは、XSLTプロセッサがXMLエンジン/パーサー/APIよりもテンプレート内からJavaコードを実行/呼び出すことができるかどうかについての質問です。Java用のデフォルトのXSLTプロセッサーは、Apache Software FoundationのXalan-CまたはXalan-J(どちらかを思い出せません)です。どちらも、拡張関数がメソッド内でJavaコードを実行できるようになっていると思います。xalan-j拡張関数を使用する前に、XSLスタイルシート内でJDBCSQLクエリを実行しました。また、SaxonXSLTプロセッサでもこの機能が可能であることを読んだことを思い出します。XSLTプロセッサを検索して、これを実装するための詳細を取得する必要があります。

これが良い考えであるかどうかの問題は、実際には問題によって異なります。上記のSQL拡張機能を使っていて、その場合は問題ないのですが、その後は本当に汚く感じました。これを言う理由は、ベンダー固有の拡張機能を追加すると、XSLTプロセッサー間の移植性が失われるためです。

あなたの例は、単に出力に新しいノードを作成していることを示しています。その場合、それがXSLTの主な機能の1つであるノードの作成である場合、Javaにこれを実行させる必要はないと思います。あなたの本当の問題は単にノードを作成するよりも複雑だと思うので、探している結果を得るためにJavaですべての作業を行うか、Javaでいくつかの作業を行ってパラメーターを渡すことを検討することをお勧めします(xsl:param要素を使用した名前/値のペア)ランタイムをXSLスタイルシートに追加します。

ここにあなたが始めるためのいくつかの簡単なサイトがあります:

于 2010-12-20T05:15:49.200 に答える