2014-01-25 2 views
0

Я создаю страницу результатов поиска Sharepoint, чтобы найти ответы на вопросы, заданные сторонним инструментом. У меня есть подключение bdc к их sql db. Я сканирую только один стол в db. Мне нужно объединить результаты вопросов и ответов, используя метод muenchian, используя несколько столбцов в одной таблице. Я не могу изменить db, поэтому мне нужно собрать результаты в поиске, чтобы быть чем-то значимым. Эта таблица содержит все записи заданных вопросов и ответы. я должен связать их вместе для нас с помощью поиска в качестве приложения, чтобы представить Q & обзорПроблемы с группировкой Muenchian

данных: Каждая запись возвращается в основных результатах поиска имеет: название - это вопрос или ответ activityid (int) - уникальный идентификатор записи activitytypeid (int) - они идентифицируют, если его Q или A/79 или 82 parentid (int) - это значение содержит actionid исходного вопроса - если запись исходный вопрос, он будет иметь значение 0 для этого столбца. isanswer (boolean) true или ничего (это своего рода избыточность и делает то же самое, что и activitytypeid, но я не был уверен, могу ли я использовать его, чтобы помочь с th е группировка)

Обзор activitype идентификатор либо: 79 - вопрос просят - это будет иметь ParentID от 0 или 2 - ответ на вопрос - это будет иметь родительский идентификатор, совпадающий с ActivityID оригинального вопроса

Я стараюсь, но без особого успеха, чтобы получить результаты поиска, сгруппированные/отсортированные, чтобы вопрос был возвращен первым. В приведенном ниже примере это будет 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

Пожалуйста, разместите свой xsl-код. –

+0

, который не слишком хорошо форматировал – user3236389

+0

Почему вы предоставляете фиксированный ключ для второго для каждого? Он должен быть ключевым («QAsked», запрошенным). Также, пожалуйста, опубликуйте вывод этого преобразования xslt. –

ответ

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, который вы указали в качестве примера желаемого результата.

Смежные вопросы