首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >组中的XSLT计数(数据视图Web部件)

组中的XSLT计数(数据视图Web部件)
EN

Stack Overflow用户
提问于 2012-08-22 12:12:44
回答 1查看 3K关注 0票数 0

我正在工作的数据视图网页部分在SP 2010,以规范一些信息,从子网站。这些站点包含分配给用户的任务的项目任务列表。客户希望看到一个汇总,它将根据用户是否已分配任务列出项目。由于一个项目可以有多个任务,一个项目可以显示在汇总中的多个用户下面,这取决于分配给哪个用户的任务。

长话短说,我需要一种方法来为每个用户选择不同项目的计数。

xml结构如下所示:

代码语言:javascript
复制
<Rows>
  <Row Project="Project 1" TaskID="1" AssignedTo="Worker A" />
  <Row Project="Project 1" TaskID="2" AssignedTo="Worker B" />
</Rows>

因此,对于项目计数,我期望有以下几点:

工人A: 1

工人B: 1

我正在尝试以下公式:

代码语言:javascript
复制
count($nodeset[not(@Project=preceding-sibling::Row/@Project) and @AssignedTo = current()/@AssignedTo])

这将返回工人A的1项目计数,但对于工人B返回0,因为项目1已被计算为工人A。

我对xslt不太了解,但据我所知,使用current()并不是最有利于资源的方法。我试过做门夹组,但我一直没能让它开始工作。不过愿意再试一次。任何建议都会有帮助,因为同样,我对xslt感到厌烦。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-08-22 13:13:29

这个转换

代码语言:javascript
复制
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
 <xsl:output omit-xml-declaration="yes" indent="yes"/>
 <xsl:strip-space elements="*"/>

 <xsl:key name="kWorker" match="@AssignedTo" use="."/>
 <xsl:key name="kProjByWorker" match="@Project" use="../@AssignedTo"/>
 <xsl:key name="kProjWorker" match="@Project" use="concat(.,'+',../@AssignedTo)"/>

 <xsl:template match="/*">
  <xsl:apply-templates select=
  "//@AssignedTo
     [generate-id()
     =
      generate-id(key('kWorker',.)[1])
      ]"/>
 </xsl:template>

 <xsl:template match="@AssignedTo">
  <xsl:value-of select="concat('&#xA;',.,': ')"/>

  <xsl:value-of select=
   "count(
     key('kProjByWorker', .)
       [generate-id()
       =
        generate-id(key('kProjWorker', concat(.,'+',current()))[1])]
     )"/>
 </xsl:template>
</xsl:stylesheet>

应用于以下XML (提供的一个更具挑战性的版本)时:

代码语言:javascript
复制
<Rows>
  <Row Project="Project 1" TaskID="1" AssignedTo="Worker A" />
  <Row Project="Project 1" TaskID="2" AssignedTo="Worker B" />
  <Row Project="Project 1" TaskID="2" AssignedTo="Worker A" />
  <Row Project="Project 2" TaskID="1" AssignedTo="Worker A" />
</Rows>

生成想要的、正确的结果

代码语言:javascript
复制
Worker A: 2
Worker B: 1

解释

使用门窗分组法两次:查找所有不同的工作人员,然后查找分配给该工作人员的不同项目。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12072894

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档