【问题标题】:xsl print node with atribute just equals to another node具有属性的 xsl 打印节点正好等于另一个节点
【发布时间】:2017-05-26 14:16:56
【问题描述】:

我有一个更复杂的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 制作的按钮时,我想要相应 div 选项卡中的所有“程序”。 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 之前把它送到学校。如果有人可以帮助我,我将非常感激。

【问题讨论】:

    标签: html xml xslt-1.0


    【解决方案1】:

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

    <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::*) ] ">
    

    希望我能帮助别人

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-07-10
      • 1970-01-01
      • 2011-08-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-10-11
      相关资源
      最近更新 更多