Как показать результаты по одному с использованием XSLT (например, XML включен) - PullRequest
0 голосов
/ 28 февраля 2012

Я создаю новый XSLT для Google Search Appliance и столкнулся с проблемой, которую мне не удалось решить.

Мой файл search.xml имеет следующую структуру:

<GSP>
<ENTOBRESULTS>
  <OBRES>
    <MODULE_RESULT>
      <Field name="fullname">Dave Smith</Field>
      <Field name="title">Job title</Field>
      <Field name="telephonenumber">00000000</Field>
    </MODULE_RESULT>
    <MODULE_RESULT>
      <Field name="fullname">John Smith</Field>
      <Field name="title">Senior job title</Field>
      <Field name="telephonenumber">00000001</Field>
    </MODULE_RESULT>
  </OBRES>
</ENTOBRESULTS>
</GSP>

И созданный мной XSLT выглядит следующим образом:

<xsl:for-each select="/GSP/ENTOBRESULTS/OBRES/MODULE_RESULT">
  <dt>
    <strong><a href="#"><xsl:value-of select="/GSP/ENTOBRESULTS/OBRES/MODULE_RESULT/Field[@name='fullname']"/></a></strong><br/>
    <em><xsl:value-of select="/GSP/ENTOBRESULTS/OBRES/MODULE_RESULT/Field[@name='title']"/></em>
  </dt>
  <dd><xsl:value-of select="/GSP/ENTOBRESULTS/OBRES/MODULE_RESULT/Field[@name='telephonenumber']"/></dd>
</xsl:for-each>

Я вижу проблему в том, что результаты отображаются следующим образом:

<dt><strong><a href="#">Dave SmithJohnSmith</a></strong><br/><em>Job titleSenior job title</em></dt>
<dd>0000000000000001</dd>

В браузере они выглядят так:

Дейв СмитДжон Смит

Должность: старшее название работы

0000000000000001

Может кто-нибудь помочь мне пролить свет на эту проблему?Я чувствую, что это очень простая ошибка XSLT, и я на самом деле не эксперт по XSLT.

Любая помощь, высоко ценимая.

Спасибо

1 Ответ

3 голосов
/ 28 февраля 2012

A for-each изменяет узел контекста, поэтому внутри for-each вы должны соответственно использовать относительное выражение, например

<xsl:for-each select="/GSP/ENTOBRESULTS/OBRES/MODULE_RESULT">
  <dt>
    <strong><a href="#"><xsl:value-of select="Field[@name='fullname']"/></a></strong><br/>
    <em><xsl:value-of select="Field[@name='title']"/></em>
  </dt>
  <dd><xsl:value-of select="Field[@name='telephonenumber']"/></dd>
</xsl:for-each>
...