在下面的MWE中,我有一个属性序列,我对其进行排序,然后输出XML和属性。当我输出整个XML时,它看起来是排序的:
<data attr="attrA">testA</data><data attr="attrZ">testZ</data>
<data attr="attrZ">testZ</data><data attr="attrA">testA</data>
但是,如果接下来打印属性,则不会得到排序的输出(升序==降序):
attrZ attrA
attrZ attrA
这是怎么可能的?我怎么能得到:
attrA attrZ
attrZ attrA
??
<xsl:stylesheet version="2.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xsl:variable name="dataUnsorted" as="element()*">
<data attr="attrZ">testZ</data>
<data attr="attrA">testA</data>
</xsl:variable>
<xsl:variable name="dataAscending" as="element()*">
<xsl:perform-sort select="$dataUnsorted">
<xsl:sort select="@attr" order="ascending"/>
</xsl:perform-sort>
</xsl:variable>
<xsl:variable name="dataDescending" as="element()*">
<xsl:perform-sort select="$dataUnsorted">
<xsl:sort select="@attr" order="descending"/>
</xsl:perform-sort>
</xsl:variable>
<xsl:template match="/">
<xsl:message>
<xsl:copy-of select="$dataAscending"/>
</xsl:message>
<xsl:message>
<xsl:copy-of select="$dataDescending"/>
</xsl:message>
<xsl:message>
<xsl:value-of select="$dataAscending/@attr"/>
</xsl:message>
<xsl:message>
<xsl:value-of select="$dataDescending/@attr"/>
</xsl:message>
</xsl:template>
</xsl:stylesheet>
发布于 2017-10-17 04:38:07
/@attr
中的步骤$dataAscending/@attr
选择属性节点并按文档顺序对它们进行排序,这就是如何定义步骤选择节点(https://www.w3.org/TR/xpath-31/#id-path-operator)。
如果您想要保留顺序,您有三个选项:
for in return
表达式:for $e in $dataAscending return $e/@attr
!
:$dataAscending!@attr
https://stackoverflow.com/questions/46789642
复制相似问题