Xslt 使用XSL在页面导航中显示子页面

Xslt 使用XSL在页面导航中显示子页面,xslt,Xslt,我正在使用XSL在LHS导航列表的XML上列出页面和子页面。我需要树/page/page[2]/page[2]/name路径下的所有页面名称 我不确定我是否纠正了错误 目前仅显示第一级页面 <xsl:template match="/"> <textarea><xsl:copy-of select="*"/></textarea> <div class="BOXContentPane nopadd-BOXContentPane clear

我正在使用XSL在LHS导航列表的XML上列出页面和子页面。我需要
树/page/page[2]/page[2]/name
路径下的所有页面名称

我不确定我是否纠正了错误

目前仅显示第一级页面

<xsl:template match="/">
<textarea><xsl:copy-of select="*"/></textarea>

 <div class="BOXContentPane nopadd-BOXContentPane clearfix">
      <ul id="nav-main" class="navigation qnav">
         <xsl:apply-templates select="//tree/page/page"/>
      </ul>
</div>

</xsl:template>

<xsl:template match="page">
<li>

    <xsl:attribute name="class">
    <xsl:choose>
      <xsl:when test="current_page">link active</xsl:when> 
      <xsl:otherwise>link</xsl:otherwise>
    </xsl:choose>
  </xsl:attribute>

  <a href="{href}" title="{title}">
    <xsl:if test="@current_page='true' or current_page_ancestor">
      <xsl:attribute name="class">active</xsl:attribute>
    </xsl:if>
    <xsl:value-of select="name" disable-output-escaping="yes"/>


  </a>
 </li>


 </xsl:template>


 </xsl:stylesheet>

  • 链接激活 链接
  • @蒂姆C:

    谢谢你的回复。预期输出是我需要在Decentant_level=“1”页面下显示Decentant_level=“2”页面。到目前为止,只有所有Decentant_level=“1”页面显示在LHS菜单上

    输入XML:

      <?xml version="1.0" encoding="UTF-8"?>
      <portlet_output xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"         xsi:noNamespaceSchemaLocation="http://www.vyre.com/navigator_portlet.xsd">
    <tree>
        <site id="2">
            <name>onamet</name>
        </site>
        <page id="128" access_controlled="false" site_level="1" secure="maybe" current_page="true">
            <name>About onam</name>
            <description>onamet about onam page</description>
            <current_page />
            <href>/about_onam/</href>
            <hreftitle>onamet - about onam</hreftitle>
            <page_mode>saved_search</page_mode>
            <publish_status>published</publish_status>
            <page id="210" access_controlled="false" site_level="2" secure="maybe" decendant_level="1">
                <name>Basic Information</name>
                <description>basic_info</description>
                <current_page_decendant />
                <href>/about_onam/basic_info/</href>
                <hreftitle>Basic Information</hreftitle>
                <page_mode>saved_search</page_mode>
                <publish_status>published</publish_status>
            </page>
            <page id="211" access_controlled="false" site_level="2" secure="maybe" decendant_level="1">
                <name>History</name>
                <description>history</description>
                <current_page_decendant />
                <href>/about_onam/history/</href>
                <hreftitle>History</hreftitle>
                <page_mode>saved_search</page_mode>
                <publish_status>published</publish_status>
                <page id="212" access_controlled="false" site_level="3" secure="maybe" decendant_level="2">
                    <name>Time Line</name>
                    <description>time_line</description>
                    <current_page_decendant />
                    <href>/about_onam/history/time_line/</href>
                    <hreftitle>Time Line</hreftitle>
                    <page_mode>saved_search</page_mode>
                    <publish_status>published</publish_status>
                </page>
                <page id="215" access_controlled="false" site_level="3" secure="maybe" decendant_level="2">
                    <name>Historical Sites</name>
                    <description>historical_sites</description>
                    <current_page_decendant />
                    <href>/about_onam/history/historical_sites/</href>
                    <hreftitle>Historical Sites</hreftitle>
                    <page_mode>saved_search</page_mode>
                    <publish_status>published</publish_status>
                </page>
            </page>
            <page id="216" access_controlled="false" site_level="2" secure="maybe" decendant_level="1">
                <name>Geography</name>
                <description>geography</description>
                <current_page_decendant />
                <href>/about_onam/geography/</href>
                <hreftitle>Geography</hreftitle>
                <page_mode>saved_search</page_mode>
                <publish_status>published</publish_status>
                <page id="220" access_controlled="false" site_level="3" secure="maybe" decendant_level="2">
                    <name>Geography</name>
                    <description>geography</description>
                    <current_page_decendant />
                    <href>/about_onam/geography/geography/</href>
                    <hreftitle>Geography</hreftitle>
                    <page_mode>saved_search</page_mode>
                    <publish_status>published</publish_status>
                </page>
                <page id="222" access_controlled="false" site_level="3" secure="maybe" decendant_level="2">
                    <name>Geology</name>
                    <description>geology</description>
                    <current_page_decendant />
                    <href>/about_onam/geography/geology/</href>
                    <hreftitle>Geology</hreftitle>
                    <page_mode>saved_search</page_mode>
                    <publish_status>published</publish_status>
                </page>
            </page>
            <page id="224" access_controlled="false" site_level="2" secure="maybe" decendant_level="1">
                <name>Governerate</name>
                <description>governerate</description>
                <current_page_decendant />
                <href>/about_onam/governerate/</href>
                <hreftitle>Governerate</hreftitle>
                <page_mode>saved_search</page_mode>
                <publish_status>published</publish_status>
                <page id="225" access_controlled="false" site_level="3" secure="maybe" decendant_level="2">
                    <name>Wilayats</name>
                    <description>wilayats</description>
                    <current_page_decendant />
                    <href>/about_onam/governerate/wilayats/</href>
                    <hreftitle>Wilayats</hreftitle>
                    <page_mode>saved_search</page_mode>
                    <publish_status>published</publish_status>
                </page>
            </page>
        </page>
    </tree>
    </portlet_output>
    
    
    奥纳米特
    关于奥南
    onamet关于OnamPage
    /关于欧南/
    奥纳姆-关于奥纳姆
    已保存的搜索
    出版
    基本信息
    基本信息
    /关于上午/基本信息/
    基本信息
    已保存的搜索
    出版
    历史
    历史
    /关于南/历史/
    历史
    已保存的搜索
    出版
    时间线
    时间线
    /关于上午/历史/时间线/
    时间线
    已保存的搜索
    出版
    古迹
    历史遗迹
    /关于南/历史/历史遗址/
    古迹
    已保存的搜索
    出版
    地理
    地理
    /关于南/地理/
    地理
    已保存的搜索
    出版
    地理
    地理
    /关于南/地理/地理/
    地理
    已保存的搜索
    出版
    地质学
    地质学
    /关于奥纳姆/地理/地质/
    地质学
    已保存的搜索
    出版
    治理
    治理
    /关于南/政府/
    治理
    已保存的搜索
    出版
    威拉雅茨
    威拉雅茨
    /关于奥纳姆/政府/维拉亚特/
    威拉雅茨
    已保存的搜索
    出版
    
    看起来您只需要添加一行代码来递归调用现有的“页面”模板

    只需在关闭li标记之前添加此语句即可

      <xsl:if test="page[@decendant_level='2']">
           <ul id="nav-main" class="navigation qnav">
             <xsl:apply-templates select="page"/>
          </ul>
      </xsl:if>
    
    
    
    因此,这将检查是否存在将DeceDant_级别设置为“2”的页面元素,如果存在,则启动一个新列表

    试试这个XSLT

    <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
        <xsl:output omit-xml-declaration="yes" indent="yes" />
    
        <xsl:template match="/">
         <div class="BOXContentPane nopadd-BOXContentPane clearfix">
              <ul id="nav-main" class="navigation qnav">
                 <xsl:apply-templates select="//tree/page/page"/>
              </ul>
        </div>
        </xsl:template>
    
        <xsl:template match="page">
        <li>
           <xsl:attribute name="class">
            <xsl:choose>
              <xsl:when test="current_page">link active</xsl:when> 
              <xsl:otherwise>link</xsl:otherwise>
            </xsl:choose>
          </xsl:attribute>
          <a href="{href}" title="{title}">
            <xsl:if test="@current_page='true' or current_page_ancestor">
              <xsl:attribute name="class">active</xsl:attribute>
            </xsl:if>
            <xsl:value-of select="name" disable-output-escaping="yes"/>
          </a>
          <xsl:if test="page[@decendant_level='2']">
               <ul id="nav-main" class="navigation qnav">
                 <xsl:apply-templates select="page"/>
              </ul>
          </xsl:if>
         </li>
       </xsl:template>
    </xsl:stylesheet>
    
    
    
  • 链接激活 链接

  • 看起来您只需要添加一行代码来递归调用现有的“页面”模板

    只需在关闭li标记之前添加此语句即可

      <xsl:if test="page[@decendant_level='2']">
           <ul id="nav-main" class="navigation qnav">
             <xsl:apply-templates select="page"/>
          </ul>
      </xsl:if>
    
    
    
    因此,这将检查是否存在将DeceDant_级别设置为“2”的页面元素,如果存在,则启动一个新列表

    试试这个XSLT

    <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
        <xsl:output omit-xml-declaration="yes" indent="yes" />
    
        <xsl:template match="/">
         <div class="BOXContentPane nopadd-BOXContentPane clearfix">
              <ul id="nav-main" class="navigation qnav">
                 <xsl:apply-templates select="//tree/page/page"/>
              </ul>
        </div>
        </xsl:template>
    
        <xsl:template match="page">
        <li>
           <xsl:attribute name="class">
            <xsl:choose>
              <xsl:when test="current_page">link active</xsl:when> 
              <xsl:otherwise>link</xsl:otherwise>
            </xsl:choose>
          </xsl:attribute>
          <a href="{href}" title="{title}">
            <xsl:if test="@current_page='true' or current_page_ancestor">
              <xsl:attribute name="class">active</xsl:attribute>
            </xsl:if>
            <xsl:value-of select="name" disable-output-escaping="yes"/>
          </a>
          <xsl:if test="page[@decendant_level='2']">
               <ul id="nav-main" class="navigation qnav">
                 <xsl:apply-templates select="page"/>
              </ul>
          </xsl:if>
         </li>
       </xsl:template>
    </xsl:stylesheet>
    
    
    
  • 链接激活 链接

  • 在本例中,您是否可以编辑问题以显示输入的XML以及预期的输出?非常感谢。模板的匹配表达式
    //tree/page/page
    仅直接到达第二级页面。为了达到更深层的嵌套级别,您必须在输出对页面的引用后调用
    。此外,您还必须重新考虑使用
    处理枚举的方式,因为现在这只在模板匹配
    /
    中处理。您必须将
    标记移动到您的
    页面
    模板,以便它能够正确处理递归。您是否可以编辑问题以显示您在这种情况下输入的XML以及预期的输出?非常感谢。模板的匹配表达式
    //tree/page/page
    仅直接到达第二级页面。为了达到更深层的嵌套级别,您必须在输出对页面的引用后调用
    。此外,您还必须重新考虑使用
    处理枚举的方式,因为现在这只在模板匹配
    /
    中处理。您必须将
      标记移动到
      页面
      模板,以便它能够正确处理递归。