Xml 转换后创建的节点的Xslt get计数

Xml 转换后创建的节点的Xslt get计数,xml,xslt-1.0,Xml,Xslt 1.0,假设我有以下Xml <Image> <page name="img031.jpg" indexDoc="1" /> <page name="img045.jpg" indexDoc="2" /> <page name="img033.jpg" indexDoc="1" /> <page name="img071.jpg" indexDoc="3" /> <page name="img091.jpg" indexDoc="1" /&

假设我有以下Xml

<Image>
<page name="img031.jpg" indexDoc="1" />
<page name="img045.jpg" indexDoc="2" />
<page name="img033.jpg" indexDoc="1" />
<page name="img071.jpg" indexDoc="3" />
<page name="img091.jpg" indexDoc="1" />
<page name="img021.jpg" indexDoc="2" />
<page name="img991.jpg" indexDoc="1" />
</Image>

我正在使用以下XSL

<?xml version="1.0" encoding="iso-8859-1"?><xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:key name="id_doc" match="page" use ="@indexDoc"/>              
<xsl:template match = "Image">
<Folder>
<xsl:apply-templates select="page[generate-id(.)=generate-id(key('id_doc', @indexDoc)[1])]"/>
</Folder>
</xsl:template>

<xsl:template match="page">
<Document>
<xsl:for-each select="key('id_doc', @indexDoc)">
<Page>
    <xsl:attribute name="nom">
    <xsl:value-of select="@name"/>
    </xsl:attribute>
    <xsl:attribute name="indexDocument">
        <xsl:value-of select="@indexDoc"/>
    </xsl:attribute>
</Page> 
</xsl:for-each>
</Document>
</xsl:template>
</xsl:stylesheet>

为了根据页面节点的indexDoc属性对其进行分组,同时创建新节点

我得到以下结果:

<Folder>
   <Document>
      <Page nom="img031.jpg" indexDocument="1"/>
      <Page nom="img033.jpg" indexDocument="1"/>
      <Page nom="img091.jpg" indexDocument="1"/>
      <Page nom="img991.jpg" indexDocument="1"/>
   </Document>
   <Document>
      <Page nom="img045.jpg" indexDocument="2"/>
      <Page nom="img021.jpg" indexDocument="2"/>
   </Document>
   <Document>
      <Page nom="img071.jpg" indexDocument="3"/>
   </Document>
</Folder>

但是我对如何获取节点的计数有点迷茫,因为它是在转换后创建的,我想将此值作为节点的属性获取

所以我想计算不同的indexDoc属性值,该值等于
节点计数,或者再次重新转换生成的xml以获得节点计数

我不确定这两种解决方案中的任何一种是否有效,因此我想知道是否有更好的方法来解决这个问题。

而不是:

<xsl:template match = "Image">
<Folder>
<xsl:apply-templates select="page[generate-id(.)=generate-id(key('id_doc', @indexDoc)[1])]"/>
</Folder>
</xsl:template>

尝试:


<xsl:template match="/Image">
    <xsl:variable name="documents" select="page[generate-id(.)=generate-id(key('id_doc', @indexDoc)[1])]"/>
    <Folder nbrDocuments="{count($documents)}">
        <xsl:apply-templates select="$documents"/>
    </Folder>
</xsl:template>