Xslt 使用XSL在页面导航中显示子页面
我正在使用XSL在LHS导航列表的XML上列出页面和子页面。我需要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
树/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
仅直接到达第二级页面。为了达到更深层的嵌套级别,您必须在输出对页面的引用后调用
。此外,您还必须重新考虑使用
处理枚举的方式,因为现在这只在模板匹配/
中处理。您必须将
标记移动到页面
模板,以便它能够正确处理递归。