0

JDeveloper Mapper for XML Transformations (XSLT)は、グラフィカル・インタフェースと自動マッピングを使用してXML変換を作成するための強力なツールです。残念ながら、サポートされる機能の範囲は限られており、もう少し複雑なマッピングは実装できません。

利用可能なXSLT関数の全範囲でJDeveloperを使用することは可能ですか? それとも、JDeveloper Mapper を使用するか、すべての XSLT 関数にアクセスするかのどちらかを選択する必要がありますか?

4

1 に答える 1

1

ソースビューを使用してコードを直接変更することで、いつでもフルパワーを得ることができます。しかし、デザイン・ビューに戻ると、コードにエラーがあり、修正するまでデザイン・ビューを使用できないことがJDeveloperから通知されます。

したがって、考えられる解決策は、グラフィカル ビューで可能なすべてのマッピングを実行してからソース ビューに移動し、そこでより複雑なマッピングと XSLT 関数を実装することです。その場合、グラフィカル ビューに戻ることはできません。

私にとって非常にうまくいくことがわかった解決策は次のとおりです。次のような新しいタグを導入しました。

<!-- show-code --> <!--
--> <!-- /show-code -->

<!-- hide-code -->
<!-- /hide-code -->

最初の 2 つのタグの間に、必要なすべての複雑な XSLT 2.0 / XSLT 3.0 関数を使用して、最終的なソリューションであるコード ブロックのソリューションを配置します。その前または後に、タグの2番目のペアを配置し、何とか同じことを行う単純なソリューションの間に入れますが、より単純な方法で、JDeveloperが理解できるようにします。

実際の解決策はコメントにあるため、JDeveloperはデザイン・ビューに切り替えることができ、そこでマッピングの他の部分を変更できます。

変換の実行

実際の変換を実行するには、XSLT コードを置換関数で前処理します。私の場合、これは次の Java コードです。

private static String applyCodeReplacement(String xml) {
    // Replacing string using regular expressions
    xml = xml.replaceAll(       "<!--\\s*show-code\\s*-->\\s*<!--","");
    xml = xml.replaceAll("-->\\s*<!--\\s*/show-code\\s*-->","");
    xml = xml.replaceAll("<!--\\s*hide-code\\s*-->", "<!--");
    xml = xml.replaceAll("<!--\\s*/hide-code\\s*-->", "-->");

    return xml;
}

これにより、すべての単純なコード ブロックが削除され、すべての複雑なコード ブロックが統合されます。これで、やりたいことを正確に実行する XSLT ファイルが完成しました。また、JDeveloper のデザイン ビューで開いて変更することもできます。

于 2013-02-15T10:26:13.193 に答える