Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Xml xslt在已排序数据上应用模板_Xml_Sorting_Xslt_Filter - Fatal编程技术网

Xml xslt在已排序数据上应用模板

Xml xslt在已排序数据上应用模板,xml,sorting,xslt,filter,Xml,Sorting,Xslt,Filter,我是xslt转换新手,在这方面遇到了一些问题。 我需要对元素进行排序和筛选,在下面的示例中,我使用两个xlt转换对输入xml进行排序和筛选。 我的问题是:如何使用单个xsl文件对排序后的数据进行排序和过滤? 提前谢谢 XML输入: 00000_1111_2222 2017-08-21T11:55:08.382Z 2017-08-21T12:07:08.539Z 2017-08-21T11:55:28.041Z 40.2407009 10.7750499 2017-08-21T11:55:28

我是xslt转换新手,在这方面遇到了一些问题。 我需要对元素进行排序和筛选,在下面的示例中,我使用两个xlt转换对输入xml进行排序和筛选。 我的问题是:如何使用单个xsl文件对排序后的数据进行排序和过滤? 提前谢谢

XML输入:


00000_1111_2222
2017-08-21T11:55:08.382Z
2017-08-21T12:07:08.539Z
2017-08-21T11:55:28.041Z
40.2407009
10.7750499
2017-08-21T11:55:28.041Z
40.2409364
10.7748426
2017-08-21T11:55:38.041Z
40.240409
10.7751432

给定您可以使用的XSLT 2.0

<xsl:variable name="sorted-positions" as="element(positions)*">
  <xsl:perform-sort select="positions">
    <xsl:sort select="timestamp" order="descending"/>
  </xsl:perform-sort>
</xsl:variable>

谢谢你的回答,只有一件事:如果我保留原始的xml文件结构?如何保留其他节点?我将在editWell中举一个例子,您最初的方法以及您的注释都有一种方法,即在希望处理其他子节点的位置放置一个附加的
apply templates
。至于一个更通用的解决方案,我认为如果你问一个显示一些输入样本的新问题会更好,我认为我们需要了解输入可能存在哪些变化(在
位置之前和/或之后的内容
,与
位置混合的内容
),然后你想如何重新排列元素(所有
位置
一起?). 还请明确说明是否可以使用XSLT2.0。
        <xsl:apply-templates select="positions">
            <xsl:sort select="timestamp" order="descending"/>
        </xsl:apply-templates>
<xsl:template match="positions">
  <xsl:if test="position() le 4">
    <xsl:next-match/>
  </xsl:if>
</xsl:template>
<xsl:for-each select="positions">
  <xsl:sort select="timestamp" order="descending"/>
  <xsl:if test="position() &lt;= 4">
    <xsl:apply-templates select="."/>
  </xsl:if>
</xsl:for-each>
<xsl:template match="data">
    <xsl:copy>
        <xsl:apply-templates select="* except positions, reverse(sort(positions, (), function($p) { $p/timestamp}))[position() le 4]"/>
    </xsl:copy>
</xsl:template>