[英]XSLT conditional node selection
這是我的問題。 我有一個這樣組織的“菜單”:
<menutree>
<menuitem name="Foo">
<menuitem name="Sub-Foo">
<menuitem name="Sub-sub-foo1"/>
<menuitem name="Sub-sub-foo2"/>
<menuitem name="Sub-sub-foo3"/>
</menuitem>
<menuitem name="Other-Sub-Foo">
<menuitem name="Other-Sub-sub-foo1"/>
<menuitem name="Other-Sub-sub-foo2"/>
<menuitem name="Other-Sub-sub-foo3"/>
</menuitem>
</menuitem>
<menuitem name="Bar">
<menuitem name="Sub-Bar">
<menuitem name="Sub-sub-Bar1"/>
<menuitem name="Sub-sub-Bar2"/>
<menuitem name="Sub-sub-Bar3"/>
</menuitem>
</menuitem>
</menutree>
假設您位於Sub-sub-foo1頁面,我正在尋找類似以下的結果。 如果我在Sub-Foo頁面中,這也是我要查找的輸出,因為我想顯示當前分支的哪些子頁面。 Other-Sub-Foo將顯示“ Other-sub-sub-foo”頁面。
想法是菜單將根據當前上下文自行構建。 樹中的每個頁面都通過“菜單”屬性進行引用,並且在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="currentPage">Sub-sub-foo1</xsl:param>
<xsl:template match="/">
Current page: <xsl:value-of select="$currentPage" /><br />
<ul>
<xsl:choose>
<xsl:when test="//menuitem[@name=$currentPage]">
<xsl:apply-templates select="//menuitem[@name=$currentPage]/.." />
</xsl:when>
<xsl:otherwise>
<xsl:apply-templates />
</xsl:otherwise>
</xsl:choose>
</ul>
</xsl:template>
<xsl:template match="menuitem">
<li>
<xsl:choose>
<xsl:when test="@name=$currentPage">
<b><xsl:value-of select="@name" /></b>
</xsl:when>
<xsl:otherwise>
<xsl:value-of select="@name" />
</xsl:otherwise>
</xsl:choose>
<xsl:if test="menuitem">
<ul>
<xsl:apply-templates />
</ul>
</xsl:if>
</li>
</xsl:template>
</xsl:stylesheet>
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.