Генерация XSLT в следующем сценарии - PullRequest
1 голос
/ 15 октября 2011

Я получаю следующий ответ от внутренних серверов, чтобы отобразить данные в виде быстрых ссылок в правой части страницы результатов поиска.

 <NavigatorItems>
  <Navigator Name="Shoes">
   <Name>Nike</Name>
   <WebSite>www.nike.com</WebSite>
   <Name>Reebok</Name>
   <WebSite>www.reebok.com</WebSite>
   <Name>Adidas</Name>
   <WebSite>www.adidas.com</WebSite>
   <ShowAll>www.mysite.com/showallshoes</ShowAll>
  </Navigator>
  <Navigator Name="Clothes">
   <Name>Lee Jeans</Name>
   <WebSite>www.lee.com</WebSite>
   <Name>Levis</Name>
   <WebSite>www.levi.com</WebSite>
   <Name>Lawman</Name>
   <WebSite>www.lawman.com</WebSite>
   <ShowAll>www.mysite.com/showallclothes</ShowAll>
  </Navigator>
 </NavigatorItems>

Мне нужно отобразить эти элементы с помощью XSLTчто-то вроде этого:

enter image description here

Пример XSLT, предложенный кем-то, выглядит примерно так:

 <xsl:for-each select="NavigatorItems/Navigator">
   <xsl:variable name="link" select="WebSite"/>
   <tr>
     <td><a href ="{$link}"><xsl:value-of select="Name"/></td>
   </tr>
   <xsl:test select="ShowAll"> 
     <xsl:variable name="linkShowAll" select="ShowAll"/>
      <tr> <td> <a href="{$linkShowAll}"> View More Results <td> </tr>
   </xsl:test>
 </xsl:for-each>

Но он отображает только

 Nike (with its appropriate link)

 Lee (with its appropriate link)

Куда я иду с этим не так?Я много пытался изменить XSLT и проверил, но не повезло.

Пожалуйста, предложите.

1 Ответ

1 голос
/ 16 октября 2011

Это преобразование :

<xsl:stylesheet version="1.0"
 xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
 <xsl:output omit-xml-declaration="yes" indent="yes"/>
 <xsl:strip-space elements="*"/>

 <xsl:template match="Navigator">
  <p><xsl:value-of select="@Name"/></p>
  <ul>
   <xsl:apply-templates select="Name"/>
  </ul>
  <xsl:apply-templates select="ShowAll"/>
 </xsl:template>

 <xsl:template match="Name">
  <li>
   <a href="http://{following-sibling::WebSite[1]}">
     <xsl:value-of select="."/>
   </a>
  </li>
 </xsl:template>

 <xsl:template match="ShowAll">
  <p>
    <a href="http://{.}">
     <xsl:text>View More Results</xsl:text>
    </a>
  </p>
 </xsl:template>
</xsl:stylesheet>

применительно к предоставленному документу XML :

 <NavigatorItems>
  <Navigator Name="Shoes">
   <Name>Nike</Name>
   <WebSite>www.nike.com</WebSite>
   <Name>Reebok</Name>
   <WebSite>www.reebok.com</WebSite>
   <Name>Adidas</Name>
   <WebSite>www.adidas.com</WebSite>
   <ShowAll>www.mysite.com/showallshoes</ShowAll>
  </Navigator>
  <Navigator Name="Clothes">
   <Name>Lee Jeans</Name>
   <WebSite>www.lee.com</WebSite>
   <Name>Levis</Name>
   <WebSite>www.levi.com</WebSite>
   <Name>Lawman</Name>
   <WebSite>www.lawman.com</WebSite>
   <ShowAll>www.mysite.com/showallclothes</ShowAll>
  </Navigator>
 </NavigatorItems>

дает желаемый, правильный результат :

<p>Shoes</p>
<ul>
   <li>
      <a href="http://www.nike.com">Nike</a>
   </li>
   <li>
      <a href="http://www.reebok.com">Reebok</a>
   </li>
   <li>
      <a href="http://www.adidas.com">Adidas</a>
   </li>
</ul>
<p>
   <a href="http://www.mysite.com/showallshoes">View More Results</a>
</p>
<p>Clothes</p>
<ul>
   <li>
      <a href="http://www.lee.com">Lee Jeans</a>
   </li>
   <li>
      <a href="http://www.levi.com">Levis</a>
   </li>
   <li>
      <a href="http://www.lawman.com">Lawman</a>
   </li>
</ul>
<p>
   <a href="http://www.mysite.com/showallclothes">View More Results</a>
</p>

и браузер отображает это так :

Обувь

Просмотреть больше результатов

Одежда

Просмотреть больше результатов

...