如何按属性数量对 DOM XML 元素进行排序?

How to order DOM XML elements by number of attributes?

有没有可行的方法可以按属性计数对元素进行排序?我主要关心性能。

我想按属性数量从多到少对元素进行排序。

例如XML 文档

<!-- 1 -->
<element attr1="" attr2="">
    <param name="" value=""/>
    <param name="" value=""/>
    <param name="" value=""/>
    <param name="" value=""/>
</element>

<!-- 2 -->
<element attr1="" attr2="" attr3"">
    <param name="" value=""/>
    <param name="" value=""/>
    <param name="" value=""/>
    <param name="" value=""/>
</element>

<!-- 3 --> 
<element attr1="">
    <param name="" value=""/>
    <param name="" value=""/>
    <param name="" value=""/>
    <param name="" value=""/>
</element>

在这种情况下正确的顺序是 2、1、3

与大多数 XML 转换一样,完成这项工作的最佳工具是 XSLT。以下是 XSLT 2.0,但在 1.0 中几乎一样简单

<xsl:template match="/*">
  <xsl:perform-sort select="element">
    <xsl:sort select="count(@*)" order="descending"/>
  </xsl:perform-sort>
</xsl:template>