我在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)"/>
如果我取出过滤器,我会得到列表中的每一行。现在,有两个考虑因素可能相关或不相关:
在SPD中,每当我查看Current DataSource层次结构时,它都不会显示此ID字段的整数值(即使它在SP UI中也是如此)。相反,它显示为“
在循环遍历Rows值的循环中,我可以获取并显示@Title字段的变量,但不能显示@ Quiz_x003a_ID字段的变量。我收到意外错误和相关ID(这是在SharePoint Online 2013中)所以我无法轻松地进行故障排除。这个字段清楚地显示了我可以从SPD的层次结构导航中复制XPATH。
提前致谢!
答案 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('&ID=',$currentQuizId,'&'))]
它按预期工作。