如何应用自定义排序对以下内容进行排序?
<maps>
<domain>pics.siteB.com</domain>
<domain>subdomain1.siteA.com</domain>
<domain>pics.siteA.org</domain>
<domain>validdomain</domain>
<domain>siteD.com</domain>
<domain>sub-subdomain4.subdomain.siteC.com</domain>
<domain>sub-subdomain1.subdomain.siteC.com</domain>
<domain>subdomain1.siteA.net</domain>
<maps>
我尝试了以下操作,然后以一种奇怪的方式进行了排序,并在分隔符不可用时删除了该条目。
<xsl:apply-templates select="*">
<!-- using <xsl:variable> throws error here -->
<xsl:sort select="string-join(reverse(tokenize(domain, '\.')[position() lt last()]), '.')"></xsl:sort>
</xsl:apply-templates>
预期输出:
siteA
,siteB
,siteC
等com
,net
,org
等pics
,subdomain1
,sub-subdomain1.subdomain
等<maps>
<domain>subdomain1.siteA.com</domain>
<domain>subdomain1.siteA.net</domain>
<domain>pics.siteA.org</domain>
<domain>pics.siteB.com</domain>
<domain>sub-subdomain1.subdomain.siteC.com</domain>
<domain>sub-subdomain4.subdomain.siteC.com</domain>
<domain>siteD.com</domain>
<domain>validdomain</domain>
<maps>
提前谢谢!
答案 0 :(得分:0)
假设您要对域进行排序的字符串是:
<domain>siteB com pics</domain>
<domain>siteA com subdomain1</domain>
<domain>siteA org pics</domain>
<domain>validdomain</domain>
<domain>siteD com</domain>
<domain>siteC com subdomain sub-subdomain4</domain>
<domain>siteC com subdomain sub-subdomain1</domain>
<domain>siteA net subdomain1</domain>
您可以使用:
XSLT 2.0
<xsl:stylesheet version="2.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>
<xsl:template match="/maps">
<xsl:copy>
<xsl:for-each select="domain">
<xsl:sort>
<xsl:variable name="tokens" select="tokenize(., '\.')" />
<xsl:value-of select="$tokens[position() ge last() - 1], reverse($tokens[position() lt last() - 1])"/>
</xsl:sort>
<xsl:copy-of select="."/>
</xsl:for-each>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>
产生问题中显示的结果。