2011-08-19 26 views
0

節點的變量鍵(分組),這是一個減少例如我的XML的使用含設置

<Albums> 
    <Album id="1"> 
     <info>sdkjsdaln</info> 
    </Album> 
    <Album id="2"> 
     <info>asdlnasd</info> 
    </Album> 
    <Album id="3"> 
     <info>sadsasd</info> 
    </Album> 
</Albums> 

我使用的擴展功能,以獲得更多的數據

<xsl:template match="Album"> 
    <xsl:variable name="Album" select="mfeg:GetAlbumMetadata(@id)"/> 
</xsl:template> 

我然後有變量$相冊,我參考獲取所有額外的數據,如下所示

<Album> 
    <Tracks> 
     <Track> 
     <Contributors> 
      <Contributor>Tim</Contributor> 
      <Contributor>Alfie</Contributor> 
     </Contributors> 
     </Track> 
     <Track> 
     <Contributors> 
      <Contributor>Tim</Contributor> 
      <Contributor>Alfie</Contributor> 
     </Contributors> 
     </Track> 
     <Track> 
     <Contributors> 
      <Contributor>Kevin</Contributor> 
      <Contributor>Sam</Contributor> 
     </Contributors> 
     </Track> 
    </Tracks> 
</Album> 

我想獲得獨特的貢獻者s,我不知道如何/如果它可能使用我的變量$相冊上的密鑰來獲取我需要的數據。我已經嘗試了下面的xpath,但它不起作用。

$Album/Tracks/Track/Contributors/Contributor[not(.=preceding-sibling::Name)] 

任何幫助將不勝感激!

回答

0

那麼要定義一個密鑰,你只需使用例如

<xsl:key name="k1" match="Track/Contributors/Contributor" use="."/> 

然後申請Muenchian分組的,你應該能夠到

<xsl:apply-templates select="$Album/Tracks/Track/Contributors/Contributor[generate-id() = generate-id(key('k1', .)[1])]"/> 

,然後你可以寫的貢獻者元素的模板。請注意,您可能需要將路徑調整爲$Album/Album/Tracks/Track/Contributors/Contributor[generate-id() = generate-id(key('k1', .)[1])],這取決於您的擴展函數返回哪種節點(元素或文檔節點)。

+0

啊那麼簡單!感謝您的支持,謝謝!猜測我只是過分複雜的事情:P – Treemonkey