如何在 XSL 中“重用”代码

2024-03-20

我正在使用 XSLT 节点。我的问题是关于 XSL 的。我在互联网上进行了搜索,但我只找到了有关 XML 处理的信息以将其显示在网页上。我正在搜索的信息是如何在这种情况下“重用”某些代码:

我的 XSL 是:

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0"
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"
    xmlns:wsb="http://tempuri.org/">

    <xsl:import href="HubGenerico.xsl" />

    <xsl:template match="/RCECSTD2">
        <xsl:element name="soap:Envelope">
            <xsl:element name="soap:Header" />
            <xsl:element name="soap:Body" />

            <xsl:choose>

                <xsl:when test="STDR2_DATOS_CONTROL/STDR2_CODOPE = 1010">
                    <xsl:element name="wsb:ConsultarSC">
                        <xsl:element name="wsb:codigoOperacion">
                            <xsl:value-of select="STDR2_DATOS_CONTROL/STDR2_CODOPE" />
                        </xsl:element>
                        <xsl:element name="wsb:numeroOperacion">
                            <xsl:value-of select="STDR2_DATOS_CONTROL/STDR2_NUMOPEBCO" />
                        </xsl:element>
                        <xsl:element name="wsb:codigoBanco">
                            <xsl:value-of select="STDR2_DATOS_EMPRESA/STDR2_CODBCO" />
                        </xsl:element>
                        <xsl:element name="wsb:codigoConvenio">
                            <xsl:value-of select="STDR2_DATOS_EMPRESA/STDR2_CODCONTR" />
                        </xsl:element>
                        <xsl:element name="wsb:numeroReferenciaDeuda">
                            <xsl:value-of
                                select="normalize-space(STDR2_DATOS_TRANSACCION/STDR2_NUMREF_DEUDA)" />
                        </xsl:element>
                        <xsl:element name="wsb:canalOperacion">
                            <xsl:value-of select="STDR2_DATOS_OPERACION/STDR2_CANAL" />
                        </xsl:element>
                        <xsl:element name="wsb:codigoOficina">
                            <xsl:value-of select="STDR2_DATOS_OPERACION/STDR2_CODOFI" />
                        </xsl:element>
                        <xsl:element name="wsb:fechaOperacion">
                            <xsl:value-of select="STDR2_DATOS_OPERACION/STDR2_FECOPE" />
                        </xsl:element>
                        <xsl:element name="wsb:horaOperacion">
                            <xsl:value-of select="STDR2_DATOS_OPERACION/STDR2_HOROPE" />
                        </xsl:element>
                        <xsl:element name="wsb:datosEmpresa" />
                    </xsl:element>
                </xsl:when>

                <xsl:when test="STDR2_DATOS_CONTROL/STDR2_CODOPE = 2010">
                    <xsl:element name="wsb:NotificarPago">
                        <xsl:element name="wsb:codigoOperacion">
                            <xsl:value-of select="STDR2_DATOS_CONTROL/STDR2_CODOPE" />
                        </xsl:element>
                        <xsl:element name="wsb:numeroOperacion">
                            <xsl:value-of select="STDR2_DATOS_CONTROL/STDR2_NUMOPEBCO" />
                        </xsl:element>
                        <xsl:element name="wsb:codigoBanco">
                            <xsl:value-of select="STDR2_DATOS_EMPRESA/STDR2_CODBCO" />
                        </xsl:element>
                        <xsl:element name="wsb:codigoConvenio">
                            <xsl:value-of select="STDR2_DATOS_EMPRESA/STDR2_CODCONTR" />
                        </xsl:element>
                        <xsl:element name="wsb:otrosDatosEmpresa" />
                        <xsl:element name="wsb:numeroReferenciaDeuda">
                            <xsl:value-of
                                select="normalize-space(STDR2_DATOS_TRANSACCION/STDR2_NUMREF_DEUDA)" />
                        </xsl:element>
                        <xsl:element name="wsb:NumDocDeuda">
                            <xsl:text>1</xsl:text>
                        </xsl:element>
                        <xsl:element name="wsb:formaPago">
                            <xsl:value-of select="STDR2_DATOS_TRANSACCION/STDR2_FORPAG" />
                        </xsl:element>
                        <xsl:element name="wsb:codigoMoneda">
                            <xsl:value-of select="STDR2_DATOS_TRANSACCION/STDR2_CODMON" />
                        </xsl:element>
                        <xsl:element name="wsb:importeTotalPagado">
                            <xsl:variable name="importeTotalPagado">
                                <xsl:call-template name="string-replace">
                                    <xsl:with-param name="text"
                                        select="string(STDR2_DATOS_TRANSACCION/STDR2_IMPTOT_PAG)" />
                                    <xsl:with-param name="pattern" select="'.'" />
                                    <xsl:with-param name="replace-with" select="''" />
                                </xsl:call-template>
                            </xsl:variable>
                            <xsl:value-of select="$importeTotalPagado" />
                        </xsl:element>
                        <xsl:element name="wsb:detallePagoBBVA" />
                        <xsl:element name="wsb:canalOperacion">
                            <xsl:value-of select="STDR2_DATOS_OPERACION/STDR2_CANAL" />
                        </xsl:element>
                        <xsl:element name="wsb:codigoOficina">
                            <xsl:value-of select="STDR2_DATOS_OPERACION/STDR2_CODOFI" />
                        </xsl:element>
                        <xsl:element name="wsb:fechaOperacion">
                            <xsl:value-of select="STDR2_DATOS_OPERACION/STDR2_FECOPE" />
                        </xsl:element>
                        <xsl:element name="wsb:horaOperacion">
                            <xsl:value-of select="STDR2_DATOS_OPERACION/STDR2_HOROPE" />
                        </xsl:element>
                        <xsl:element name="wsb:datosEmpresa" />
                    </xsl:element>
                </xsl:when>

            </xsl:choose>

        </xsl:element>
    </xsl:template>
</xsl:stylesheet>

您会看到一些创建的元素是“重复的”(相同的代码),但它们有不同的父元素(ConsultarSC and NotificarPago)。所以我的问题是如何重用该“重复代码”,我不知道是否存在一些可以使用“引用”(如 ESQL)的“标签”。


在您的示例中,“命名”模板是您的朋友。例如,如果您想在不同的位置创建相同的两个元素,请创建一个命名模板,如下所示

 <xsl:template name="exampleTemplate">
    <xsl:element name="wsb:codigoOperacion">
        <xsl:value-of select="STDR2_DATOS_CONTROL/STDR2_CODOPE" />
    </xsl:element>
    <xsl:element name="wsb:numeroOperacion">
        <xsl:value-of select="STDR2_DATOS_CONTROL/STDR2_NUMOPEBCO" />
    </xsl:element>
 </xsl:template>

然后,要创建这两个元素,只需像这样调用模板即可:

<xsl:call-template name="exampleTemplate" />

就是这样!

请注意,就像函数一样,您也可以将参数传递给模板。

<xsl:template name="example">
    <xsl:param name="value" />
    Value is <xsl:value-of select="$value" />
</xsl:template>

<xsl:call-template name="example">
    <xsl:with-param name="value" select="element" />
</xsl:call-template>

顺便说一句,没有必要使用xsl:元素如果您使用静态名称来创建元素,只需直接写出元素名称即可。所以,而不是这个

    <xsl:element name="wsb:numeroOperacion">
        <xsl:value-of select="STDR2_DATOS_CONTROL/STDR2_NUMOPEBCO" />
    </xsl:element>

只要这样做

    <wsb:numeroOperacion>
        <xsl:value-of select="STDR2_DATOS_CONTROL/STDR2_NUMOPEBCO" />
    </wsb:numeroOperacion>
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在 XSL 中“重用”代码 的相关文章

随机推荐

  • 从 PHP 上传多个文件到 Amazon S3

    有没有一种方法可以一次性上传多个文件 而不必为每个文件重新连接 我使用 S3 作为我的 php 应用程序的存储 该应用程序需要存储大量 一次 100 个 大多数较小 大约 10k 的图像文件 目前我正在循环遍历它们并使用以下代码为每个单独上
  • ASP.NET Core 无法在 IIS 下运行:HTTP 错误 500.0 - ANCM 进程内处理程序加载失败

    我刚刚将我的 Web 应用程序从 ASP NET Framework MVC 升级到 ASP NET Core 2 2 该应用程序在 IIS Express 下运行良好 但是当我尝试在 IIS 下运行它时 它会给出一般错误 HTTP 错误
  • react-test-renderer create() 与 @testing-library/react render()

    我是 React 新手 对所有测试库感到困惑 我的测试代码可以工作 但调用似乎是多余的create 来自react test renderer以便使用它的toMatchSnapshot 并且必须打电话render 来自 testing li
  • 如何使用 C# 将 json 插入到 cosmos db 集合中

    我有一个 Json 文件 我想将其存储在 cosmos DB 集合中 如何使用 C 添加完整的 Json 文件 有同样的客户端库吗 我已经浏览过以下网址微软网址 https learn microsoft com en us azure c
  • 在 python 3 中使用 python 2 架子

    我将数据存储在使用 python 2 7 创建的架子文件中 当我尝试从 python 3 4 访问该文件时 出现错误 gt gt gt import shelve gt gt gt population shelve open shelve
  • jQuery 向上计数

    我不太擅长 javascript 但我希望有一个漂亮的小动画 可以向上计数数字 我发现了this http sophilabs github io jquery counter 在 Github 上 但是速度很慢 我正在计算一个小数点后10
  • Django Collectstatic 命令在 AWS Elastic Beanstalk Amazon Linux 2 Python 3 平台中失败

    几天来 我一直在努力使用 Amazon Linux 2 Python 3 7 平台将 Django 应用程序部署到 Elastic Beanstalk 设法部署应用程序后 我无法运行命令python3 manage py collectst
  • 如何在 didSelectRowAtIndexPath 之后运行prepareForSegue?

    我正在尝试获取indexPath row该用户单击 然后检查我的数组以从中返回一个字符串indexPath row然后通过prepareforSegue发送字符串 但它不起作用 我认为该程序在之前运行了prepareForSeguedids
  • SignalR hub 中的上下文为空

    我有一个 Web 表单应用程序并进行测试 以了解 SignalR 如何满足我的要求之一 我的中心代码 using System using System Collections Generic using System Linq using
  • pip install enum 无法正常工作,显示“intflag”的错误没有

    pip 安装枚举 不工作显示错误 AttributeError 模块 enum 没有属性 IntFlag enum34 is the stdlib Enum backport but it only supports features fo
  • 在 python 中并行化这个嵌套 for 循环

    我再次努力提高这段代码的执行时间 由于计算确实非常耗时 我认为最好的解决方案是并行化代码 我首先使用地图 如中所述this https stackoverflow com questions 29217088 parallelize a n
  • 从 DOM 中删除空节点元素

    在没有 jQuery 的情况下从 dom 中识别和删除空元素的最佳方法是什么 如果我有如下所示的代码 div div p p div div p Some content p div div 摆脱空虚的最好方法是什么 p and p div
  • 在 C++ 中清除内存中的回车符

    我有以下代码 int main Variables char name Take the users name as input cout lt lt Please enter you name lt lt endl cin gt gt n
  • 模拟詹金斯管道步骤

    我在 jenkinsfile 中使用了一个类 这里 是它的简化版本 class TestBuild def build jenkins jenkins script jenkins sh returnStdout true script e
  • 渐进式 Web 应用程序的预期启动体验是什么?

    测试渐进式 Web 应用程序 当我在飞行模式下启动应用程序时 我得到了意外的启动 启动体验 Android Chrome 从主屏幕体验启动 我看到一个白色的屏幕 然后是 离线恐龙 的短暂闪烁 然后应用程序成功启动 一切正常 启动时间比我预期
  • 如何自定义ARC-Welder的屏幕尺寸?

    我想将 ARC Welder chrome extension 的屏幕尺寸更改为 7 英寸屏幕 显示在我的电脑上 以在不同的屏幕尺寸上测试应用程序 这可以使用例如元数据输入来完成吗 类似于我最近问的问题 但我认为答案相同 似乎在外形规格方面
  • 如何正确处理Python中的可选功能

    我正在开发实现科学模型的 python 包 我想知道处理可选功能的最佳方法是什么 这是我想要的行为 如果无法导入某些可选依赖项 例如 在无头机器上绘制模块 我想在我的类中禁用使用这些模块的功能 警告用户如果他尝试使用它们以及所有这些 而不会
  • 如何在 Django 模型中轻松地将记录标记为已删除,而不是实际删除它们?

    我不想删除 Django 应用程序中的记录 而是只想将它们标记为 已删除 并将它们隐藏在我的活动查询中 我这样做的主要原因是为用户提供取消删除选项 以防他们意外删除记录 某些后端审计跟踪也可能需要这些记录 有很多外键关系 因此当我将记录标记
  • r facet_wrap 未与 geom_point 正确分组

    我正在与 R 中的facet wrap 作斗争 它应该很简单 但是facet 变量没有被拾取 这是我正在运行的 plot ggplot data item household descr count mapping aes x item h
  • 如何在 XSL 中“重用”代码

    我正在使用 XSLT 节点 我的问题是关于 XSL 的 我在互联网上进行了搜索 但我只找到了有关 XML 处理的信息以将其显示在网页上 我正在搜索的信息是如何在这种情况下 重用 某些代码 我的 XSL 是