在以下方案中生成XSLT

时间:2011-10-15 17:11:10

标签: asp.net xml xslt xslt-2.0 xslt-1.0

我从后端服务器收到以下响应,将数据显示为搜索结果页右侧的快速链接。

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

答案 0 :(得分:1)

此转化

<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>

,浏览器会像这样显示

       
  •       Nike    
  •    
  •       Reebok    
  •    
  •       Adidas    

   View More Results

衣服

       
  •       Lee Jeans    
  •    
  •       Levis    
  •    
  •       Lawman    

   View More Results