我有XML,看起來像這樣:選擇子元素(而無需離開當前節點)在XLST
<library>
<album>
<!-- Album title, length, # of tracks, etc -->
<playas>
<extension>.mp3</extension>
<type>audio/mpeg</type>
</playas>
<playas>
<extension>.ogg</extension>
<type>audio/ogg</type>
</playas>
<track>
<!-- Track number, title, length -->
</track>
<!-- Many, many more tracks -->
</album>
</library>
而在我的XLS文件,我想用xls:for-each
來確定每個軌道的source
src屬性。這裏是行不通:
<xsl:for-each select="track">
<audio>
<!-- Parent (album)'s playas elements -->
<xsl:for-each select="../playas">
<source>
<xsl:attribute name="src">
<!-- Parent (album)'s title + '-src', where I store the audio files
along with current node (playas)'s extension -->
<xsl:value-of select="../title" />-src/<xsl:value-of select="title" /><xsl:value-of select="extension" />
</xsl:attribute>
<xsl:attribute name="type">
<xsl:value-of select="srctype" />
</xsl:attribute>
</source>
</xsl:for-each>
</audio>
</xsl:for-each>
上面的代碼給<source src="AlbumTitle-src/.mp3" type="audio/mpeg"> (or .ogg and audio/ogg)
- 當前track
的標題不存在。然而,每條曲目的代碼都是正確創建的,所以我只需要知道如何獲得當前曲目的標題(從playas的上下文)。
我也試過for-each select="preceding-sibling::playas"
,沒有運氣。如何在不「離開」當前track
的情況下訪問每個playas
的孩子?
編輯:我知道這將通過簡單的硬編碼爲每個普拉亞斯擴展<source>
很容易實現,但我想用最少的執行做到這一點。
編輯2: @Peter:我預期的輸出爲每個軌道(等效HTML)是
<audio>
<source src="AlbumTitle-src/track.mp3" type="audio/mpeg" />
<source src="AlbumTitle-src/track.ogg" type="audio/ogg" />
</audio>
通過其子元素是怎麼想的將每個曲目與每個playas關聯起來?每首歌曲是否都有可用的專輯格式? –
是的,我已經做到了每個曲目都可以在每個playas擴展中使用。我不確定你的第一個問題是什麼,但是我需要從每個playas中訪問「當前」曲目的標題。 – Trojan
@trojansdestroy:你能告訴我們你的預期產出嗎?你不能使單個屬性和和處理兩個元素,我的意思是你不能將多個值寫入單個屬性。感謝yolu,Peter –
Peter