如何使用XSLT一次显示一个结果(例如包含XML)

时间:2012-02-28 11:47:38

标签: xml xslt google-search-appliance

我正在为Google Search Appliance创建新的XSLT,而且我遇到了一个我无法解决的问题。

我的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 个答案:

答案 0 :(得分:3)

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>