1

毎回既存のものに触れることなく、XMLファイルからFreemarkerにTemplateMethodsを追加したいと思います。
これは、次のような値ですでに可能です。

XMLの例:

<example>
    <value1>abc</value>
    <value2>def</value>
</example>

テンプレートの例:

This value1: ${doc.example.value1} and this value2: ${doc.example.value2}

xmlに必要な数の値を追加し、呼び出し元のプログラムを変更せずにテンプレートで使用できます。


TemplateMethodModelFreemarkerコードを追加/削除するたびに変更せずに、の実装でこれを行うにはどうすればよいですか?

より具体的に-私がやりたいこと:

XMLモデル:
TemplateMethodのクラスと名前が含まれています

<templatemethodmodel>
   <method name="intToHex">example.methods.IntToHexMethod</method>
</templatemethodmodel>

テンプレート:のクラスの
インスタンスを呼び出すIntToHexMethod

Only an example: ${intToHex(3)}

これで、テンプレートを処理するJavaコードに触れることなく、新しいメソッド(=名前とクラスを含むxmlエントリ)を追加できるようになります。

4

1 に答える 1

1

FreeMarker の DOM ラッパーを介して (つまり、DOM オブジェクトを "doc" として公開することによって) 実行したい場合は、これを行うことはできません ( を拡張しない限りfreemarker.ext.dom.NodeModel、しかしそれはおそらく難しいでしょう)。ただし、すべての XML 関連機能 (XPath など) を備えた DOM ラッパーが本当に必要ない場合は、XMLからMap(of Map-s of Map-s など) を作成し、テンプレートのMapasを公開することができます。doc(または、必要DOMに応じて XML をテンプレートに公開する独自の Node ラッパーを作成することもできますが、これはやや複雑です。)

于 2012-11-07T17:39:10.327 に答える