Представление данных SharePoint Designer — количество XSLT

Я работаю с веб-частью просмотра данных в SPD 2010. Моя структура xml выглядит следующим образом:

<ProjectGroups>
    <ProjectGroup>
        <GroupID>1</GroupID>
        <ProjectName>Project 1</ProjectName>
    </ProjectGroup>
    <ProjectGroup>
        <GroupID>2</GroupID>
        <ProjectName>Project 2</ProjectName>
    </ProjectGroup>
    <ProjectGroup>
        <GroupID>2</GroupID>
        <ProjectName>Project 3</ProjectName>
    </ProjectGroup>
    </ProjectGroups>

Это сводная веб-часть, поэтому я хочу получить количество проектов в каждой группе проектов. В моем примере выше группа с идентификатором 1 имеет 1 проект, группа с идентификатором 2 имеет 2. Я уверен, что есть способ сделать это, но я как бы изучаю xslt на лету, поэтому я точно не знаю, что делать. . Любая помощь приветствуется. Спасибо.


person gsmith140    schedule 21.06.2012    source источник


Ответы (1)


Эта таблица стилей...

<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" indent="yes"/>

<xsl:key name="groups" match="ProjectGroup" use="GroupID" />

<xsl:template match="@*|node()">
 <xsl:copy> 
   <xsl:apply-templates select="@*|node()" />
 </xsl:copy> 
</xsl:template>

<xsl:template match="ProjectGroup[generate-id()=generate-id(key('groups',GroupID)[1])]">
 <xsl:copy> 
   <xsl:apply-templates select="@*" />
   <xsl:attribute name="count-of-projects">
     <xsl:value-of select="count(key('groups',GroupID))" />
   </xsl:attribute>
   <xsl:apply-templates select="node()" />
 </xsl:copy> 
</xsl:template>

</xsl:stylesheet>

... при применении к вашему вводу будет производиться ...

<?xml version="1.0" encoding="utf-8"?>
<ProjectGroups>
    <ProjectGroup count-of-projects="1">
        <GroupID>1</GroupID>
        <ProjectName>Project 1</ProjectName>
    </ProjectGroup>
    <ProjectGroup count-of-projects="2">
        <GroupID>2</GroupID>
        <ProjectName>Project 2</ProjectName>
    </ProjectGroup>
    <ProjectGroup>
        <GroupID>2</GroupID>
        <ProjectName>Project 3</ProjectName>
    </ProjectGroup>
</ProjectGroups>
person Sean B. Durkin    schedule 21.06.2012
comment
Хорошо, это действительно работает, так что спасибо за это. Просто продолжение. Что, если бы идентификатор группы был атрибутом группы проекта, а не дочерним узлом? - person gsmith140; 22.06.2012
comment
Затем используйте @GroupID вместо GroupID - person Sean B. Durkin; 23.06.2012