Xml 转换后创建的节点的Xslt get计数
假设我有以下XmlXml 转换后创建的节点的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" /&
<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>