使用查阅列过滤数据查看器中的XSLT

时间:2014-01-03 02:15:03

标签: xml sharepoint xsl-stylesheet

我在SharePoint中有两个列表,测验和测验问题。测验问题有一个指向测验的查阅列,并包含原始列表的行ID(测验ID)的列。我想用一些自定义XSLT创建一个数据查看器部分,我刚刚完成但无法使最终查询正常工作,因此我想获得测验ID的所有测验问题。

首先,我在SPD中创建了一个数据源,并包含两个列表(链接)。然后我在我的页面上插入了一个新的数据视图,并包含了数据源。我的字段的层次结构在SPD中看起来是正确的:

/ dsQueryResponse / QuizQuestions /行/行/ @ Quiz_x003a_ID

在我的XSLT中,我把过滤器写成这样的东西:

<xsl:variable name="Rows" select="/dsQueryResponse/QuizQuestions/Rows/Row[@Quiz_x003a_ID=10]"/> 
在这种情况下,10只是测试数据,我确认它在列表中。但是,当我尝试此查询时,我没有返回任何结果,如下所示:

Count: <xsl:value-of select="count($Rows)"/>

如果我取出过滤器,我会得到列表中的每一行。现在,有两个考虑因素可能相关或不相关:

  1. 在SPD中,每当我查看Current DataSource层次结构时,它都不会显示此ID字段的整数值(即使它在SP UI中也是如此)。相反,它显示为“

  2. 在循环遍历Rows值的循环中,我可以获取并显示@Title字段的变量,但不能显示@ Quiz_x003a_ID字段的变量。我收到意外错误和相关ID(这是在SharePoint Online 2013中)所以我无法轻松地进行故障排除。这个字段清楚地显示了我可以从SPD的层次结构导航中复制XPATH。

  3. 提前致谢!

2 个答案:

答案 0 :(得分:0)

试试这个,我假设你的xml与此类似:

<dsQueryResponse>
 <QuizQuestions>
    <Rows>
        <Row Quiz_x003a_ID="10">1</Row>
        <Row Quiz_x003a_ID="10">11</Row>
        <Row Quiz_x003a_ID="10">12</Row>
        <Row Quiz_x003a_ID="12">13</Row>
        <Row Quiz_x003a_ID="10">14</Row>
        <Row Quiz_x003a_ID="11">15</Row>
    </Rows>
 </QuizQuestions>
</dsQueryResponse>

这是XSL:

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

  <xsl:variable name="Rows" select="count(/dsQueryResponse/QuizQuestions/Rows/Row[@Quiz_x003a_ID=10])"/>
   <xsl:template match="/">
   <div>
   Count: <xsl:value-of select="$Rows"/>
   </div>
   </xsl:template>
  </xsl:stylesheet>

答案 1 :(得分:0)

我认为问题更多地围绕SP中的查找字段并呈现为锚字段而不是整数。这有什么设置吗?我看到了一些似乎建议让ID工作的例子。但是,一旦我通过select语句改变了:

/Rows/Row[@Quiz_x003a_ID=$currentQuizId]

为:

/Rows/Row[contains(@Quiz_x003a_ID,concat('&amp;ID=',$currentQuizId,'&amp;'))]

它按预期工作。