0

我有以下 xml 文件

<musicLibrary>
<compilation id="C01" title="Best of something">
    <title no="1" name="firstOne">
        <fileID>F01</fileID>
    </title>
    <title no="2" name="secondOne">
        <fileID>F02</fileID>
    </title>
    <title no="3" name="thirdOne">
        <fileID>F03</fileID>
    </title>
    <title no="4" name="fourthOne">
        <fileID>F04</fileID>
        <fileID>F05</fileID>
    </title>
</compiltion>
<compilation id="C02" title="Best of another thing">
    ...
</compilation>

<files>
    <file id="F01">
        <filename>soundFile8.mp3</filename>
        <size>3.456</size>
        <length>3.23</length>
    </file>
    <file id="F02">
        <filename>soundFile2.mp3</filename>
        <size>3.456</size>
        <length>3.23</length>
    </file>
    <file id="F03">
        <filename>soundFile7.mp3</filename>
        <size>3.456</size>
        <length>3.23</length>
    </file>
    <file id="F04">
        <filename>soundFile5.mp3</filename>
        <size>3.456</size>
        <length>3.23</length>
    </file>
    <file id="F05">
        <filename>soundFile3.mp3</filename>
        <size>3.456</size>
        <length>3.23</length>
    </file>
</files>
</musicLibrary>

是否可以通过仅提供集合 ID 从文件信息中检索,例如一个编译的播放时间总共多长时间?我真的坚持这一点。:/我真的很想念SQL中的连接之类的东西;)

提前致谢!

4

1 回答 1

1

这可以通过使用 xpath 的 XSLT 样式表来完成(您可以将其视为 XSLT 的连接等效项)。在此样式表中,返回每个编译的长度总和:

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
    version="1.0">

    <xsl:template match="musicLibrary">
        <xsl:apply-templates select="compilation"/>  
    </xsl:template>

    <xsl:template match="compilation">
        <xsl:variable name="ids" select="title/fileID"/>
        <compilation id="{@id}" title="{@title}">
            <xsl:attribute name="total-length"> 
                <xsl:value-of select="sum(//files/file[@id = $ids]/length)"/>
            </xsl:attribute>
        </compilation>
    </xsl:template>

</xsl:stylesheet>

输出:

<compilation id="C01" title="Best of something" total-length="16.15"/>
于 2013-01-04T22:18:07.743 回答