0

JDeveloper Mapper for XML Transformations (XSLT) 是使用图形界面和自动映射创建 XML 转换的强大工具。不幸的是,它支持的功能范围有限,并且无法实现更复杂的映射。

是否可以将 JDeveloper 与可用 XSLT 功能的全部范围一起使用?还是我必须在使用 JDeveloper Mapper 还是访问所有 XSLT 函数之间做出选择?

4

1 回答 1

1

您始终可以通过使用源视图并直接修改代码来获得全部功能。但是,当您返回到设计视图时,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 的设计视图中打开和修改它。

于 2013-02-15T10:26:13.193 回答