Xml 每个节点的最大不同子元素数

Xml 每个节点的最大不同子元素数,xml,xslt,xpath,grouping,xslt-1.0,Xml,Xslt,Xpath,Grouping,Xslt 1.0,使用XSLT 1.0,如何在如下结构(如果可能的话)中获得作为相同元素的子元素的不同元素的最大数量 A. B 无聊的 ... C C ... ... 使用提供的独特分组解决方案,我能够获得整体独特条目的数量,但实际上我对每个节点的这个数量感兴趣,它会更低。我一直在尝试将count()和max()函数应用于此,但我在XSLT/XPath方面的有限经验不允许我成功地这样做。任何帮助都将不胜感激。您引用的链接方向正确。在这种情况下,您只需要这样一个复合键: <xsl:key name="

使用XSLT 1.0,如何在如下结构(如果可能的话)中获得作为相同
元素的子元素的不同
元素的最大数量


A.
B
无聊的
...
C
C
...
...

使用提供的独特分组解决方案,我能够获得整体独特条目的数量,但实际上我对每个
节点的这个数量感兴趣,它会更低。我一直在尝试将count()和max()函数应用于此,但我在XSLT/XPath方面的有限经验不允许我成功地这样做。任何帮助都将不胜感激。

您引用的链接方向正确。在这种情况下,您只需要这样一个复合键:

<xsl:key
  name="kInfoByContainer"
  match="info"
  use="concat(generate-id(../../container), '+', .)" />
使用XSLT1.0,我如何获得最大数量的不同 结构中每个节点的元素,如下所示(如果 一切可能吗

以下是如何找到所需的最大值:

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
 <xsl:output omit-xml-declaration="yes" indent="yes"/>

 <xsl:key name="kContInfo" match="info" use=
  "concat(generate-id(ancestor::container[1]),'+',.)"/>

 <xsl:template match="/*">
  <xsl:for-each select="container">
    <xsl:sort data-type="number" order="descending" select=
    "count(*/info[generate-id()
                 =generate-id(key('kContInfo',
                                  concat(generate-id(ancestor::container[1]),
                                         '+',.)
                                  )
                             )])"/>
     <xsl:if test="position() = 1">
      <xsl:value-of select=
    "count(*/info[generate-id()
                 =generate-id(key('kContInfo',
                                  concat(generate-id(ancestor::container[1]),
                                         '+',.)
                                  )
                             )])"/>
     </xsl:if>
  </xsl:for-each>
 </xsl:template>
</xsl:stylesheet>

谢谢我认为复合键可能会有所帮助,但我不知道如何成功地应用它们。我没有意识到max()只是XSLT2.0。我想这解释了我犯的一些错误。。。谢谢你的分类技巧。
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
  <xsl:output omit-xml-declaration="no" indent="yes" method="text"/>
  <xsl:strip-space elements="*"/>

  <xsl:key
    name="kInfoByContainer"
    match="info"
    use="concat(generate-id(../../container), '+', .)"/>

  <xsl:template match="container">
    Container <xsl:value-of select="position()"/> has unique info elements:
    <xsl:value-of
      select="count(*/info[generate-id() = 
                           generate-id(key(
                             'kInfoByContainer',
                              concat(generate-id(../../container), '+', .)
                           )[1])])"/>

  </xsl:template>
</xsl:stylesheet>
<root>
  <container>
    <subelem sometimes_empty="yes"/>
    <subelem>
      <info>A</info>
    </subelem>
    <subelem>
      <info>B</info>
      <irrelevant>meh</irrelevant>
    </subelem>
  </container>
  <container>
    <subelem>
      <info>C</info>
    </subelem>
    <subelem>
      <info>C</info>
    </subelem>
  </container>
</root>
 Container 1 has unique info elements:
 2
 Container 2 has unique info elements:
 1
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
 <xsl:output omit-xml-declaration="yes" indent="yes"/>

 <xsl:key name="kContInfo" match="info" use=
  "concat(generate-id(ancestor::container[1]),'+',.)"/>

 <xsl:template match="/*">
  <xsl:for-each select="container">
    <xsl:sort data-type="number" order="descending" select=
    "count(*/info[generate-id()
                 =generate-id(key('kContInfo',
                                  concat(generate-id(ancestor::container[1]),
                                         '+',.)
                                  )
                             )])"/>
     <xsl:if test="position() = 1">
      <xsl:value-of select=
    "count(*/info[generate-id()
                 =generate-id(key('kContInfo',
                                  concat(generate-id(ancestor::container[1]),
                                         '+',.)
                                  )
                             )])"/>
     </xsl:if>
  </xsl:for-each>
 </xsl:template>
</xsl:stylesheet>
<root>
  <container>
    <subelem sometimes_empty='yes'/>
    <subelem>
        <info>A</info>
    </subelem>
    <subelem>
        <info>B</info>
        <irrelevant>meh</irrelevant>
    </subelem>
    ...
  </container>
  <container>
    <subelem>
        <info>C</info>
    </subelem>
    <subelem>
        <info>C</info>
    </subelem>
    ...
  </container>
  ...
</root>
2