2010-07-28 62 views
0

我有一个使用XML + XSLT编码的网站,它为我提供了一个完整的HTML网站。现在,为了使网站更加美观,我想分割文档的一些部分:页眉,页脚和侧边栏。我在看谷歌,我发现这个解决方案:在XSLT中包含一个XML,然后应用一个foreach

<xsl:param name="doc" select="document('menu.xml')"/> 
<xsl:template match="/"> 
<html><head></head><body><xsl:for-each 
select="$doc"><xsl:apply-templates/></xsl:for-each></body></html> 
</xsl:template> 

我试图申请它,我可以得到它的工作。这是我使用的方式:

由于xsl位于文件夹内,因此我将路由更改为“../menu.xml”,这很有效。

<?xml version="1.0" encoding="ISO-8859-1"?> 
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
    <xsl:param name="menu" select="document('../menu.xml')"/> 

    <xsl:template match="/"> 

更有效,工作代码,然后:

<ul class="menu_top"> 
    <xsl:for-each select="$menu"> 
     <li> 
      <a> 
       <xsl:attribute name="href"> 
        #<xsl:value-of select="link" /> 
       </xsl:attribute> 

       <xsl:value-of select="name"/> 
      </a> 
     </li> 
    </xsl:for-each> 
</ul> 
<xsl:for-each select="$menu"> 
    <div class="submenu"> 
     <xsl:attribute name="id"> 
      <xsl:value-of select="link" /> 
     </xsl:attribute> 

     <ul> 
      <xsl:for-each select="child"> 
       <li> 
        <a> 
         <xsl:attribute name="href"> 
          <xsl:value-of select="link" /> 
         </xsl:attribute> 

         <xsl:value-of select="name"/> 
        </a> 
       </li> 
      </xsl:for-each> 
     </ul> 
    </div> 
</xsl:for-each> 

最后我menu.xml文件:

<?xml version="1.0" encoding="utf-8"?> 
    <menu> 
     <category> 
      <name>First</name> 
      <link>menu-1</link> 

      <child> 
       <name>Child 1</name> 
       <link>#</link> 
      </child> 

      <child> 
       <name>Child 2</name> 
       <link>#</link> 
      </child>   
     </category> 
</menu> 

我有多个类别条目,但我简化它。

提前致谢!

回答

2

document()函数返回要导入的文件的根目录。在这种情况下,这是menu元素,而不是category元素。如果您想循环访问类别,请使用以下代码:

<xsl:for-each select="$menu/menu/category"> 
    ... 
+0

谢谢Welbog!这工作正常。我试图投票,但我没有足够的声誉!再次感谢! :) – ipalaus 2010-07-28 12:09:56

+0

@Isern Palaus:另外,没有必要为所有'for-each'。它是完全有效的'apply-templates select =“$ doc”'。检查我的XML/XSLT客户端网站http://www.aranedabienesraices.com.ar – 2010-07-28 13:18:56

+0

@Alejando我不知道如何使用正确的模板。 :( – ipalaus 2010-07-28 14:07:50

相关问题