xslt - xslt 3.0 转换帮助 - 按升序对元素进行排序
问题描述
我编写了 xslt 代码来按升序对记录进行排序。但是,整个程序在处理大量记录时会以运行时错误终止作业。提高性能的建议之一是在 xslt 3.0 中编写代码。我对xslt 3.0不熟悉,有人可以帮我翻译下面的代码
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:xs="http://www.w3.org/2001/XMLSchema" exclude-result-prefixes="xs" version="2.0">
<xsl:output indent="no" method="xml"/>
<xsl:param name="implMode"/>
<xsl:strip-space elements="*"/>
<xsl:template match="@* | node()">
<xsl:copy>
<xsl:apply-templates select="@* | node()"/>
</xsl:copy>
</xsl:template>
<xsl:template match="root">
<xsl:copy>
<xsl:apply-templates select="row">
<xsl:sort select="col5"
data-type="text" order="ascending"/>
</xsl:apply-templates>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>
解决方案
我希望提出建议的人听说 XSLT 3.0 支持流式执行,这大大降低了处理大型文档的内存需求。但是,并非所有转换都是可流式传输的 - 只有在保持顺序的情况下才能对转换进行流式传输,并且由于代码的主要目的是对数据进行排序,因此这里不是这种情况。
在研究如何解决这个问题时,我们首先需要一些数字。说数据“大”是不够的,这就像请求帮助设计一座跨越“宽”河流的桥梁。给我们数字。
如果数据真的太大而无法放入内存,您可能需要考虑将其加载到数据库中并在那里对其进行排序,或者使用多遍排序算法(没有人知道如何编写这些,它曾经是基本的每个程序员的知识,实际上是每个打卡机房操作员的知识,但这些天很少需要)。
推荐阅读
- nginx - 反向代理的 Nginx 冲突服务器名称
- jquery - 使用 DT::datatable 为用户调整列大小
- reactjs - 在 antdesign 中如何将光标移动到 IE 11 的输入字段 onBlur 的开头?
- html - 如何在div的所有侧面放置滚动条。(水平(顶部,底部),垂直(左,右)
- android - 安卓调度
- salesforce - Salesforce - Visualforce 页面 - Publicy Visible
- c++ - 如何使用例如clang警告强制编译器通用代码?
- java - 如何编写测试以使用 Mockito 检查 SQLIntegrityConstraintViolationException
- javascript - 允许电子 `requires` 在 Vite 中原封不动地通过
- r - 基于公共 id 绑定行