首页 > 解决方案 > 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>

标签: xsltxslt-3.0

解决方案


我希望提出建议的人听说 XSLT 3.0 支持流式执行,这大大降低了处理大型文档的内存需求。但是,并非所有转换都是可流式传输的 - 只有在保持顺序的情况下才能对转换进行流式传输,并且由于代码的主要目的是对数据进行排序,因此这里不是这种情况。

在研究如何解决这个问题时,我们首先需要一些数字。说数据“大”是不够的,这就像请求帮助设计一座跨越“宽”河流的桥梁。给我们数字。

如果数据真的太大而无法放入内存,您可能需要考虑将其加载到数据库中并在那里对其进行排序,或者使用多遍排序算法(没有人知道如何编写这些,它曾经是基本的每个程序员的知识,实际上是每个打卡机房操作员的知识,但这些天很少需要)。


推荐阅读