0

我正在构建一个 Sharepoint 搜索结果页面,以查找第三方工具中提出的问题的答案。我有一个到他们的 sql 数据库的 bdc 连接。我只在数据库中爬行一张桌子。我需要使用 muenchian 方法在同一个表中使用多个列将问题和答案结果组合在一起。我无法更改数据库,因此我必须将结果汇总在一起以寻找有意义的东西。此表包含所有问题的条目和给出的答案。我必须将它们联系在一起,以便我们使用搜索作为应用程序来呈现问答

数据概述:核心搜索结果中返回的每条记录都有一个: 标题 - 这是问题或答案 activityid(int) - 条目的唯一 ID activitytypeid(int) - 这些标识是 Q 还是 A / 79或 82 parentid(int) - 此值包含原始问题的活动 ID - 如果记录是原始问题,则此列的值为 0 isanswer(boolean) true 或无(这有点多余,确实与 activitytypeid 相同,但我不确定是否可以使用它来帮助分组)

Review activitype id 是:79 - 提出的问题 - parentid 为 0 或 82 - answer to question - 这将有一个与原始问题的 activityid 匹配的 parent id

我正在尝试将我的搜索结果分组/排序以首先返回问题,但没有取得多大成功。在下面的示例中,它将是 activityid 19142,并且问题的答案在下面缩进,所有分组在一个集合中

在审查我的 hack 或示例方面的任何帮助都会很棒。

我只是想了解 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>  
4

1 回答 1

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 结构作为所需结果的示例。

于 2014-01-28T19:53:30.820 回答