I'm newbie to xslt and I have below code which is not working for simple sort: help is appriciated.
<xsl:template match="ns0:MT_name">
<xsl:for-each select="name">
<xsl:sort select="name"/>
</xsl:for-each>
</xsl:template>
<?xml version="1.0" encoding="UTF-8"?>
<ns0:MT_name xmlns:ns0="http://example.com/sap/pi/TEST/xslt">
<name>11</name>
<name>88</name>
<name>55</name>
</ns0:MT_name>
<?xml version="1.0" encoding="UTF-8"?>
<ns0:MT_name xmlns:ns0="http://example.com/sap/pi/TEST/xslt">
<name>11</name>
<name>55</name>
<name>88</name>
</ns0:MT_name>
更改 <xsl:sort select="name"/>
到 <xsl:sort select="."/>
. 当前的背景已经是 name
.
试试这个XSLT 1.0样式表。
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:ns0="http://xyz.com/sap/pi/TEST/xslt">
<xsl:output indent="yes"/>
<xsl:strip-space elements="*"/>
<xsl:template match="node()|@*">
<xsl:copy>
<xsl:apply-templates select="node()|@*"/>
</xsl:copy>
</xsl:template>
<xsl:template match="ns0:MT_name">
<xsl:copy>
<xsl:apply-templates select="@*"/>
<xsl:apply-templates select="name">
<xsl:sort select="." order="ascending"/>
</xsl:apply-templates>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>
<xsl:sort select="." order="ascending"/>
所以完整的模板是
<xsl:template match="ns0:MT_name">
<xsl:for-each select="name">
<xsl:sort select="." order="ascending"/>
<xsl:copy-of select="."/>
</xsl:for-each>
</xsl:template>
我还注意到,在你的例子中,你有一个 "标记"。
你的模板并没有创建任何输出,因为主体的 xsl:for-each
包括 xsl:sort
仅限。为了生成所需的输出,样式表可以像这样。
<?xml version="1.0" encoding="ISO-8859-1"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:ns0="http://xyz.com/sap/pi/TEST/xslt">
<xsl:template match="ns0:MT_name">
<xsl:copy>
<xsl:for-each select="name">
<xsl:sort select="." data-type="number"/>
<xsl:copy-of select="."/>
</xsl:for-each>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>