2011-04-28 149 views
0

以來我有一個像XML結構如下:獲取特定節點的父節點,其童裝

<Page Depth="1"> 
    <Page Title="Communities" Depth="2"> 
    <Page Title="Blog" iscurrent="true" Depth="3"/> 
    <Page Title="Something" Depth="3"/> 
    <Page Title="Anything" Depth="3"/> 
    </Page> 
    <Page Title="News" Depth="2"> 
    <Page Title="Archived news" Depth="3"/> 
    </Page> 
</Page> 

我已經把這個成一種叫做XML變量sitemap

我與掙扎XPATH這將返回節點的父節點以及@iscurrent屬性及其子節點。所以從上面的例子中,我需要的子集:

<Page Title="Communities" Depth="2"> 
    <Page Title="Blog" iscurrent="true" Depth="3"/> 
    <Page Title="Something" Depth="3"/> 
    <Page Title="Anything" Depth="3"/> 
</Page> 

我曾嘗試應用此模板,但沒有得到輸出:

<xsl:apply-templates mode="Tabs" 
     select="$sitemap/Page[@iscurrent='true']/parent/*" /> 

模板不應該是相關的,但無論如何,在這裏是它的一個基本版本:

<xsl:template mode="Tab" match="*"> 
    <li> 
     <xsl:if test="@iscurrent = 'true'"> 
     <xsl:attribute name="class">current</xsl:attribute> 
     </xsl:when> 
    <xsl:value-of select="@MenuTitle" /> 
    </li> 
</xsl:template> 

回答

2

你想要的東西,選擇一個孩子Page,其iscurrent屬性等於truePage元素:

$sitemap/Page[Page[@iscurrent='true']] 

示範:

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
    <xsl:variable name="sitemap" select="/Page" /> 
    <xsl:template match="/"> 
     <xsl:apply-templates select="$sitemap/Page[Page[@iscurrent='true']]" /> 
    </xsl:template> 
    <xsl:template match="@*|node()"> 
     <xsl:copy> 
      <xsl:apply-templates select="@*|node()" /> 
     </xsl:copy> 
    </xsl:template> 
</xsl:stylesheet> 

在此輸入:

<Page Depth="1"> 
    <Page Title="Communities" Depth="2"> 
     <Page Title="Blog" iscurrent="true" Depth="3" /> 
     <Page Title="Something" Depth="3" /> 
     <Page Title="Anything" Depth="3" /> 
    </Page> 
    <Page Title="News" Depth="2"> 
     <Page Title="Archived news" Depth="3" /> 
    </Page> 
</Page> 

輸出:

<Page Title="Communities" Depth="2"> 
    <Page Title="Blog" iscurrent="true" Depth="3" /> 
    <Page Title="Something" Depth="3" /> 
    <Page Title="Anything" Depth="3" /> 
</Page> 
+0

中。謝謝一堆!這就說得通了。 – Armstrongest 2011-04-28 03:32:23

1

的XPath是

/Page[*[@iscurrent='true']] 

'*選擇後代和自我。

+0

但我希望頁面的父母[@ iscurrent ='true']以及父母的子女。 – Armstrongest 2011-04-28 03:28:38

+0

你會得到父母。該表達式表示找到一個Page元素,該元素具有屬性iscurrent設置爲true的子元素。 – 2011-04-28 20:57:59

+0

你寫道:_「'*'選擇後代和自我」_。我認爲它沒有。 – 2011-04-28 21:54:58