我正在构建一个Sharepoint搜索结果页面,以查找第三方工具中提出的问题的答案。 我有一个与他们的sql db的bdc连接。 我正在爬行db中的一个表。 我需要使用muenchian方法将问题和答案结果组合在一起,使用同一个表中的多个列。 我不能改变数据库所以我必须将结果拉到一起搜索才能有意义。 此表包含所提问题的所有条目和给出的答案。 我必须使用搜索作为呈现Q& A
的应用程序将它们绑在一起数据概述: 核心搜索结果中返回的每条记录都有: 标题 - 这是问题或答案 activityid(int) - 条目的唯一ID activitytypeid(int) - 这些标识它是Q还是A / 79或82 parentid(int) - 此值包含原始问题的activityid - 如果记录是原始问题,则此列的值为0 isanswer(boolean)是或否(这有点多余,与activitytypeid相同,但我不确定是否可以使用它来帮助分组)
评分 activitype id是: 79 - 被问到的问题 - 这将是0的parentid 要么 82 - 回答问题 - 这将具有与原始问题的活动ID匹配的父ID
我正在尝试但没有太大成功将我的搜索结果分组/排序以首先返回问题。在下面的示例中,它将是activityid 19142,并且问题的答案在下面缩进,所有组合在一个集合中
在审查我的黑客或示例时的任何帮助都会很棒。
我只是想了解xsl,这是一个很大的学习曲线。我还有很长的路要走,而且肯定已经深入到此深处。
我目前得到的原始xml结果没有格式化结果
<All_Results>
<Result>
<id>1</id>
<title>Original Question</title>
<isanswer></isanswer>
<parentid>0</parentid>
<activitytype>79</activitytype>
<activityid>19142</activityid>
</Result>
<Result>
<id>2</id>
<title>Answer to original question</title>
<isanswer>true</isanswer>
<parentid>19142</parentid>
<activitytype>82</activitytype>
<activityid>19146</activityid>
</Result>
<Result>
<id>3</id>
<title>Another Question</title>
<isanswer></isanswer>
<parentid>0</parentid>
<activitytype>79</activitytype>
<activityid>19200</activityid>
<Result>
<Result>
<id>4</id>
<title>Second answer to original question</title>
<isanswer>true</isanswer>
<parentid>19142</parentid>
<activitytype>82</activitytype>
<activityid>19199</activityid>
</Result>
<Result>
<id>5</id>
<title>and another Question</title>
<isanswer></isanswer>
<parentid>0</parentid>
<activitytype>79</activitytype>
<activityid>19254</activityid>
<Result>
<Result>
<id>6</id>
<title>Answer to another question</title>
<isanswer>true</isanswer>
<parentid>19200</parentid>
<activitytype>82</activitytype>
<activityid>19265</activityid>
</Result>
</All_Results>
我正在寻找的输出将所有答案与相应的问题分组,这是非常简化的,但我认为这也是我想要得到的。
<All_Results>
<Result>
<title>Original Question</title>
<title>Answer to original question</title>
<title>Second answer to original question</title>
</Result>
<Result>
<title>Another Question</title>
<title>Answer to another question</title>
</Result>
</All_Results>
我对模板的尝试
<xsl:template match="All_Results">
<xsl:for-each select="Result[count(. | key('QAsked', 'activityid')[1]) > 0]">
<xsl:sort select="questionasked" />
<xsl:value-of select="title" /><br />
<xsl:value-of select="questionasked" /><br />
<xsl:value-of select="activityid" /><br /><br />
<xsl:for-each select="key('QAsked', '82')">
<xsl:sort select="questionasked" />
<xsl:if test="normalize-space(questionasked) = '82'"></xsl:if><br />
<xsl:value-of select="questionasked" /><br />
<xsl:value-of select="originalquestion" /><br />
<xsl:value-of select="likes" /><br /><br />
</xsl:for-each>
</xsl:for-each>
</xsl:template>
答案 0 :(得分:0)
试试这个模板:
<xsl:key name="QAsked" match="Result[(activitytype = '82') or (activitytype = '79')]" use="concat(substring(parentid, 1, number(not(parentid = '0')) * string-length(parentid)),substring(activityid, 1, number(parentid = '0') * string-length(activityid)))"/>
<xsl:template match="All_Results">
<All_Results>
<xsl:for-each select="Result[count(. | key('QAsked', concat(substring(parentid, 1, number(not(parentid = '0')) * string-length(parentid)),substring(activityid, 1, number(parentid = '0') * string-length(activityid))))[1]) = 1]">
<xsl:sort select="id" />
<Result>
<xsl:for-each select="key('QAsked', concat(substring(parentid, 1, number(not(parentid = '0')) * string-length(parentid)),substring(activityid, 1, number(parentid = '0') * string-length(activityid))))">
<xsl:sort select="parentid" />
<title>
<xsl:value-of select="title" />
</title>
</xsl:for-each>
</Result>
</xsl:for-each>
</All_Results>
</xsl:template>
输出是xml结构,您提供了该结构作为所需结果的示例。