具有属性的xsl打印节点恰好等于另一个节点

时间:2017-05-26 14:16:57

标签: html xml xslt-1.0

我有一个更复杂的xml但是要简化

    <Canal id="RTP1" posicao="1" tematica="nacional">
     <nome>Radio Televisao Portuguesa 1</nome>
     <logo>../images/rtp1.jpg</logo>
     <Dia id="Antevespera">
    <!-- PROGRAMAS -->
    <programa designacao="televendas" genero="Entretenimento">
        <descricao>Enganar o povo</descricao>
        <horario>
            <hora_inicio>00:00</hora_inicio>
            <duracao>390</duracao>
            <hora_fim>06:30</hora_fim>
        </horario>
    </programa>
    <programa designacao="Bom dia Portugal" genero="Informativo">
        <descricao>O BOM DIA PORTUGAL é um programa de informação apresentado por João Tomé...</descricao>
        <horario>
            <hora_inicio> 06:30</hora_inicio>
            <duracao>210</duracao>
            <hora_fim>10:00</hora_fim>
        </horario>
    </programa>
    <programa designacao="A Praça" genero="Entretenimento">
        <descricao>Manhãs divertidas e informativas.</descricao>
        <horario>
            <hora_inicio>10:00</hora_inicio>
            <duracao>132</duracao>
            <hora_fim>12:12</hora_fim>
        </horario>
    </programa>
    <programa designacao="A Minha Mãe Cozinha Melhor Que a Tua - Diários" genero="Entretenimento">
        <descricao>Numa prova contra o tempo, duas equipas de dois familiares, competem para provar que a
            sua receita de família é a melhor..
        </descricao>
        <horario>
            <hora_inicio>12:12</hora_inicio>
            <duracao>48</duracao>
            <hora_fim>13:00</hora_fim>
        </horario>
    </programa>
        </Dia>
    <!-- DIA -->
    <Dia id="Vespera">
    <!-- PROGRAMAS -->
    <programa designacao="troca o paco" genero="Entretenimento">
        <descricao>Enganar o povo
        </descricao>
        <horario>
            <hora_inicio>00:00</hora_inicio>
            <duracao>390</duracao>
            <hora_fim>06:30</hora_fim>
        </horario>
    </programa>
    <programa designacao="Bom dia Portugal" genero="Informativo">
        <descricao>O BOM DIA PORTUGAL é um programa de informação apresentado por João Tomé de Carvalho e
            Carla Trafaria
        </descricao>
        <horario>
            <hora_inicio>06:30</hora_inicio>
            <duracao>0210</duracao>
            <hora_fim>10:00</hora_fim>
        </horario>
    </programa>
    </Dia>
    </Canal>
        </Programacao>
    <GeneroProgramas>
        <genero>Entretenimento</genero>
        <genero>Cultural</genero>
        <genero>Informativo </genero>
        <genero>Ficcao </genero>
        <genero>Desporto</genero>
    </GeneroProgramas>
</EPG>

我想输出到图像中的html页面。当你点击已经与xslt交配的按钮时,我想要在rescpective div选项卡中的所有“programa”。 pretended output

我的xsl现在是

    <?xml version="1.0" encoding="UTF-8"?>
    <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"
                    xmlns:epg="http://xml.dei.isep.ipp.pt/schema/EPG" xmlns:xls="http://www.w3.org/1999/XSL/Transform">

        <xsl:output method="html"/>
        <xsl:template match="/">
            <html>
                <head>
                    <link rel="stylesheet" href="../css/styleCriterios.css"/>
                    <script type="text/javascript" src="../JS/criterios.js"/>
                </head>
                <body>
                    <p>Visualize os programas por genero</p>
                    <!--criar as tabs -->
                    <xsl:apply-templates select="epg:EPG/epg:GeneroProgramas"/>
                </body>
            </html>
        </xsl:template>
        <!-- templates para genero de programas -->
        <xsl:template match="epg:GeneroProgramas">
            <div class="tab">
                <xsl:for-each select="epg:genero">
                    <button class="tablinks">
                        <xsl:attribute name="onClick">
                            <xsl:text>openType(event, '</xsl:text>
                            <xsl:value-of select="text()"/>
                            <xsl:text>')</xsl:text>
                        </xsl:attribute>
                        <xsl:value-of select="text()"/>
                    </button>
                </xsl:for-each>
            </div>
            <xsl:for-each select="epg:genero">
                <div class="tabcontent">
                    <xsl:attribute name="id">
                        <xsl:value-of select="current()"/>
                    </xsl:attribute>
                    <xsl:for-each select="//epg:programa">
                        <!-- IT HERE WHERE I NEED TO COMPARE AND JUST OUTPUT THE PROGRAMA THAT HAVE IN @DESIGNACAO THE SAME AS epg:genero text() -->
                    </xsl:for-each>
                </div>
            </xsl:for-each>
        </xsl:template>
</xsl:stylesheet>

所以这就是我的全部,而我的卡住了。在过去的3天里已经有了这个,我必须把它送到星期天23:55到学校。如果有人能帮助我,我会非常感激。

1 个答案:

答案 0 :(得分:0)

好吧,我找到了。如果有人需要它,我就是这样做的

<xsl:for-each select="epg:genero">
            <xsl:variable name="var_genero" select="current()"/>
            <div class="tabcontent">
                <xsl:attribute name="id">
                    <xsl:value-of select="current()"/>
                </xsl:attribute>
                <xsl:for-each select="//epg:Dia">

                <xsl:for-each select="epg:programa[@genero=$var_genero][not(.=preceding::*) ] ">

注意下一行是保留我的变量

的地方
<xsl:variable name="var_genero" select="current()"/>

然后我用它来比较

<xsl:for-each select="epg:programa[@genero=$var_genero][not(.=preceding::*) ] ">
希望我能帮助别人