性能:调用模板与应用模板

2024-01-29

在XSLT处理中,apply-template和call-template之间有性能差异吗?在我的样式表中有很多情况我可以使用其中任何一个,哪个是最好的选择?


与所有性能问题一样,答案取决于您的特定配置(特别是您正在使用的 XSLT 处理器)以及您正在执行的处理类型。

<xsl:apply-templates>获取一系列节点并逐一遍历它们。对于每个模板,它都会找到与该节点匹配的具有最高优先级的模板,并调用它。所以<xsl:apply-templates>就像一个<xsl:for-each><xsl:choose>内部,但更加模块化。

相比之下,<xsl:call-template>按名称调用模板。上下文节点没有变化(没有<xsl:for-each>)并且无法选择使用哪个模板。

所以在完全相同的情况下,你可能会想象<xsl:call-template>会更快,因为它做的工作更少。但如果你处于以下任一情况<xsl:apply-templates> or <xsl:call-template>可以使用,你可能会这样做<xsl:for-each> and <xsl:choose>您自己,在 XSLT 中,而不是处理器在幕后为您做这件事。所以最终我猜测它可能会平衡。但正如我所说,这在很大程度上取决于您的处理器已实施的优化类型以及您正在执行的处理。测量一下看看。

我关于何时使用匹配模板以及何时使用命名模板的经验法则是:

  • use <xsl:apply-templates>如果您正在处理单个节点以创建结果,则需要匹配模板;如果需要以多种不同方式处理特定节点(例如在目录与文档正文中),请使用模式
  • use <xsl:call-template>以及命名模板(如果您正在处理除单个节点之外的其他内容),例如字符串、数字或节点集
  • (在 XSLT 2.0 中)使用<xsl:function>如果您返回原子值或现有节点
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

性能:调用模板与应用模板 的相关文章

随机推荐

  • Google Cloud Endpoints 链接 iOS 客户端问题

    这个问题的产生是因为我不完全理解iOS中的静态库 而且谷歌的文档似乎有点稀疏 我正在尝试将 Google Cloud Endpoints 用于我的移动后端 我为我的客户端库生成 m 和 h 文件 然后我创建了一个新项目 OwnItApi 将
  • 将 fscanf 转换为 C 中的二维数组

    我想将 txt 中的元素扫描到数组中 txt 没有我将有多少行或列 它只包含一个坐标和数组的元素 它看起来像这样 2 3 2 1 3 0 我怎样才能将这些数字放入一个数组中 以便array 0 0 将2 and array 1 0 将3 e
  • 在 Crypto++ 中使用原始 RSA 算法加密和解密消息?

    我在用Crypto http git github com weidai11 cryptopp git密码学相关作品的图书馆 任务的子部分是加密和解密文本 该消息的长度最多为 256 个字符 包含字母数字 空格 点和特殊字符 这段代码适用于
  • WPF - 使用视频作为背景

    我想知道是否可以在 WPF 中使用视频作为背景 我的意思是 我希望在后台播放视频 并在其顶部添加控件 如果你还是不太明白我的意思 你应该看看这个网站 http www barrelny com recap 2012 http www bar
  • Laravel 数据透视表具有多列,需要稍后插入

    我有两张桌子routes and stations和一个数据透视表route station 详见表格 路线表 id number code 车站表 id name code 路线站表 枢轴 id route id station id n
  • 如何解析javadoc? [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我正在使用 Java 阅读 javadocs 我的java对象有属性 描述 包裹名字 方法名称 方法描
  • 回显 jpassword 字符一次然后隐藏它

    在我的 swing 应用程序中 我想回显 jpassword 字段字符一段时间 1 秒 然后再次隐藏它 我想在用户输入字符后逐个字符地执行此操作 当用户输入字符时 显示它 然后隐藏它 然后对于所有输入字符重复此操作 有人可以告诉我这是否可能
  • XSLT 运行速度太慢

    我有大约 100 个 XML 文件 我想将它们转换为另一个具有更好结构的文件 本示例将其转换为 CSV 但我还有一个变体 可以将其转换为更好的 XML 格式与我无关 我看到有很多这样的问题 但我发现这些例子很难适应 因为问题不是样式表不起作
  • 在 Flutter 中,如何在本机文件资源管理器中为用户打开文件夹,以便用户可以浏览其文件/文件夹

    我正在 flutter 中构建一个文件储物柜应用程序 它可以锁定文件和文件夹 当用户解锁文件夹时 我希望我的应用程序显示一个在本机文件资源管理器中查看文件夹内容的选项 有什么办法可以实现这个功能吗 提前致谢 您可以针对您提到的用例尝试此包
  • 在具有特定约束的滚动视图中显示图像(使用自动布局)

    我想在视图控制器中显示标题和图像下方 我的限制是 标签可以位于屏幕顶部 50 像素处 标签可以有一行或多行 图像可以位于我的标签的 50 像素处 图像必须具有屏幕的宽度 滚动视图必须根据所有这些元素的大小进行滚动 我有一个带有滚动视图的视图
  • 在java中读取Zip文件内容而不解压

    我有 byte zipFileAsByteArray This zip file has rootDir Folder1 first txt Folder2 second txt PictureFolder image png 我需要的是获
  • END事务和COMMIT事务的区别

    我正在尝试使用 java 来模拟数据库恢复子系统 但是 我有以下问题 每当发出开始交易时 是否总是需要有一个结束交易 就像下面的例子 b1 Begin txn 1 r1 X Read item X using txn 1 e1 End tx
  • UpdateSourceTrigger=PropertyChanged 和转换器

    我有一个简单的Converter将 符号添加到输入的正数中TextBox 当输入号码时 我想启动一些操作 但我不想等到TextBox失去焦点 我想在用户输入文本时立即更新绑定 a 的默认行为TextBox是当用户离开该框时 绑定源会更新 U
  • 在同一个项目中使用 Material Ui 和 Tailwind 是一个好习惯吗

    I am using next js with tailwind css and i somehow need some of the ready to use components in my project so i can save
  • 打开多个 VSCode 窗口时在 2 个 VSCode 窗口之间切换的快捷方式

    我使用的是 Mac 我打开了几个 VSCode 窗口 我只想在 2 个 上次查看的 窗口之间切换 有谁知道这样做的键盘快捷键是什么 我尝试了 command 但它一一浏览了所有打开的 VSCode 窗口 选项 选项卡也是如此 我尝试了 co
  • 如何使用java查找操作系统驱动器? [复制]

    这个问题在这里已经有答案了 我们如何用java编写代码来找出安装操作系统的驱动器号 你可以从环境中得到它 System getenv SystemDrive
  • Expo 重新加载无法在 Linux 上运行(使用 Android 设备)

    我的世博会应用程序遇到问题 遗憾的是它不接受我的改变 实时重新加载 热重新加载不起作用 当我摇动设备并按 重新加载 时 我的应用程序会重新加载 但更改不会出现 我已经做了什么 重新安装守望者 delete node modules and
  • 动态波浪路径/边框

    我需要构建一些东西 但我的数学能力达不到标准 我想要构建的是类似的东西这个演示 https www html5canvastutorials com advanced html5 canvas colorful wave effect 但可
  • 当“a”和“b”都是整数时,为什么“a ^ b”返回数字?

    给定两个整数 a lt 1L b lt 1L 正如我所期望的 将它们相加 相减或相乘也会得到一个整数 class a b 1 integer class a b 1 integer class a b 1 integer 但除以它们会得到一
  • 性能:调用模板与应用模板

    在XSLT处理中 apply template和call template之间有性能差异吗 在我的样式表中有很多情况我可以使用其中任何一个 哪个是最好的选择 与所有性能问题一样 答案取决于您的特定配置 特别是您正在使用的 XSLT 处理器