Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/xslt/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
按元素链接xml数据_Xml_Xslt - Fatal编程技术网

按元素链接xml数据

按元素链接xml数据,xml,xslt,Xml,Xslt,我有以下xml文件 <musicLibrary> <compilation id="C01" title="Best of something"> <title no="1" name="firstOne"> <fileID>F01</fileID> </title> <title no="2" name="secondOne"> <fileID>

我有以下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>

F01
F02
F03
F04
F05
...
声音文件8.mp3
3.456
3.23
声音文件2.mp3
3.456
3.23
声音文件7.mp3
3.456
3.23
声音文件5.mp3
3.456
3.23
声音文件3.mp3
3.456
3.23
是否可以仅通过提供集合id从文件中检索信息,例如一次编译的播放时间总共有多长?我真的被这件事缠住了。:/ 我真的错过了一些东西,比如来自SQL的连接;)


提前谢谢

这可以通过使用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"/>


这是XML解析器的问题。大多数语言都有它们,例如Python、Perl.Hmm,XSLT和Xpath等等难道不可能吗?我在考虑使用模板之类的东西。我设法用它获得了编译的所有歌曲,但我真的不知道如何让它将标题的FileID链接到文件的id属性,从而获得编译的总长度:(像SQL中的连接将非常有用:)我已经很久没有使用XSLT了,所以我不确定这一点。我只知道这在几乎任何现代编程或脚本语言中都是相当微不足道的。^^确实是这样,但必须有一种方法来实现它。。。事实上,我对自己没有完成这件事感到非常不安。看起来很简单,但我现在找不到线索(顺便说一句,谢谢你的快速回答!!基于XSLT的解决方案非常简单,相当类似于SQL中的解决方案,但是使用xpath谓词而不是连接。哦,你是我的人!!我是对的,太容易看到了;)非常感谢你救了我一个晚上。现在我可以不流泪,不去想我的愚蠢:)我想的方向完全错了;)这是双向的。花更多时间使用XSLT,您也会忘记SQL—我知道我已经忘记了;)嗯,我还看不出XML/XSLT等的巨大优势,但这可能是因为我对它完全陌生。在我看来,这仍然是混乱的,真的很容易,事情似乎真的很麻烦。但我猜原因是我:)Buuuuuut我还在学习^^