2013-07-10 92 views
0

我有一個很大的xml文件,其中有幾個節點slide,下面是我的大型xml的一部分。通過分組節點獲取屬性值XSLT

<slide add_info="e" name="slide31.xml" nav_lvl_1="Contact" nav_lvl_2="Company" > 
    --------something---------- 
</slide> 
<slide add_info="a" name="slide32.xml" nav_lvl_1="References" nav_lvl_2="Company"> 
    -----something---- 
</slide> 
<slide add_info="b" name="slide33.xml" nav_lvl_1="References" nav_lvl_2="Company" > 
    ------something-------- 
</slide> 
<slide add_info="c" name="slide34.xml" nav_lvl_1="References" nav_lvl_2="Company" > 
    --------something---------- 
</slide> 
<slide add_info="d" name="slide34.xml" nav_lvl_1="Contact" nav_lvl_2="Company" > 
    --------something---------- 
</slide> 

在這裏,我要組只具有屬性ReferencesCompany,並得到這些nodes.For例如 預期輸出的所有add_info屬性valuesslide節點:

a b c 

目前我這樣做:

<xsl:choose> 
    <xsl:when test="@nav_lvl_1='References'"> 
     <xsl:if test="@nav_lvl_2='Company'"> 
     <xsl:for-each select="//@add_info"> 
      <xsl:value-of select="."/> 
     </xsl:for-each> 
     </xsl:if> 
    </xsl:when> 
</xsl:choose> 

但是,這給了我alladd_info屬性在整個document.For例如文本值: 它給了我:

e a b c d 

但我需要的輸出只能作爲a b c 我應該如何改變上述xslt代碼來實現這一目標。任何sugggestions ..我卡在這裏:(

回答

1

你說「組」,但分組是特別想要創建具有相同屬性的多個組。

只選擇一組具有特定特性的結構,簡單地解決他們在一個單一的XPath地址:

<xsl:for-each select="//slide[@nav_lvl_1='References' and @nav_lvl_2='Company'"> 
    <xsl:value-of select="@add_info"/> 
</xsl:for-each> 

...雖然我會放棄//slide和使用地址不//得到所有幻燈片的父母,然後作爲兒童處理幻燈片。