JDeveloper Mapper for XML Transformations (XSLT) 是使用图形界面和自动映射创建 XML 转换的强大工具。不幸的是,它支持的功能范围有限,并且无法实现更复杂的映射。
是否可以将 JDeveloper 与可用 XSLT 功能的全部范围一起使用?还是我必须在使用 JDeveloper Mapper 还是访问所有 XSLT 函数之间做出选择?
JDeveloper Mapper for XML Transformations (XSLT) 是使用图形界面和自动映射创建 XML 转换的强大工具。不幸的是,它支持的功能范围有限,并且无法实现更复杂的映射。
是否可以将 JDeveloper 与可用 XSLT 功能的全部范围一起使用?还是我必须在使用 JDeveloper Mapper 还是访问所有 XSLT 函数之间做出选择?
您始终可以通过使用源视图并直接修改代码来获得全部功能。但是,当您返回到设计视图时,JDeveloper 会告诉您代码中存在错误,在您修复它们之前您无法使用设计视图。
因此,一个可能的解决方案是在图形视图中进行所有可能的映射,然后移动到源视图并在那里实现更复杂的映射和 XSLT 函数。如果这样做,您将无法返回图形视图。
我发现一个非常适合我的解决方案如下:我引入了如下新标签:
<!-- show-code --> <!--
--> <!-- /show-code -->
和
<!-- hide-code -->
<!-- /hide-code -->
在前两个标签之间,您放置了作为最终解决方案的代码块的解决方案,使用了您想要的所有复杂的 XSLT 2.0 / XSLT 3.0 函数。在此之前或之后,您将第二对标记放在一个简单的解决方案之间,该解决方案以某种方式执行相同的操作,但以更简单的方式并且 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 的设计视图中打开和修改它。