1

次のような XML があります。

<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各トラックのsourcesrc 属性を決定するために使用したいと考えています。機能しないものは次のとおりです。

<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"、運がありませんでした。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>
4

1 に答える 1

1

あなたがあなたの中にいるとき、あなたは<xsl:for-each select="../playas">すでにplayas要素の文脈にいます。したがって、その子を取得するためtitleに必要なのは<xsl:value-of select="title" />. トラック タイトルを取得するには、trackfor-each 内で変数を設定し、次のようにソース出力要素で使用できます。

<xsl:for-each select="track">
<audio>
    <xsl:variable name="track_title" select="title" />
    <!-- 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="$track_title" /><xsl:value-of select="extension" />
            </xsl:attribute>
            <xsl:attribute name="type">
                <xsl:value-of select="srctype" />
            </xsl:attribute>
        </source>
    </xsl:for-each>
</audio>

于 2013-07-04T05:46:51.670 に答える