我认为我在这里的问题对人们来说可能有点不知所措,所以我试图分块解决。
<xsl:apply-templates mode="sort">
<xsl:sort select="name()"/>
<xsl:sort select="./*"/>
<xsl:sort data-type="text" select="./*[text()]"/>
</xsl:apply-templates>
第一条sort
语句<xsl:sort select="name()"/>
有效,我理解。
第二条sort
语句<xsl:sort select="./*"/>
似乎几乎完全符合我的要求,但它没有考虑到text()
子节点。我真的不明白为什么这个sort
声明正在做它正在做的事情。添加它只是解决我的问题的众多尝试之一。
第三个sort
陈述<xsl:sort data-type="text" select="./*[text()]"/>
是我试图从第二个sort
陈述中断的地方开始。它不起作用,并且在使用Saxon-HE 9.4时会产生错误:
捕获:net.sf.saxon.trans.XPathException:不允许将多个项目的序列作为 xsl:sort 的 @select 属性
我在这里尝试做的是根据子元素的文本在其兄弟元素中正确排序父元素。
非常感谢您的帮助,因为 XSLT 的重量正在压垮我。