Мне нужно получить тег в XML - PullRequest
1 голос
/ 29 января 2020

Мне нужно получить название курса, которое включено в модуль "Lenguajes de marcas y sistemas de gestión de información".

Я пытаюсь это сделать, но не знаю, как связываться друг с другом .

Результат должен быть таким:

Администрация систем информации в красном

Веб-сайт Desarrollo de Aplicaciones

Я разработал это Спасибо за вашу помощь.

XML:

<?xml version="1.0" encoding="UTF-8"?>
<ies>
  <nombre>IES Abastos</nombre>
  <web>http://www.iesabastos.org</web>
  <ciclos>
    <ciclo id="ASIR">
      <nombre>Administración de Sistemas Informáticos en Red</nombre>
      <grado>Superior</grado>
      <decretoTitulo año="2009" />
    </ciclo>
    <ciclo id="DAW">
      <nombre>Desarrollo de Aplicaciones Web</nombre>
      <grado>Superior</grado>
      <decretoTitulo año="2010" />
    </ciclo>
    <ciclo id="SMR">
      <nombre>Sistemas Microinformáticos y Redes</nombre>
      <grado>Medio</grado>
      <decretoTitulo año="2008" />
    </ciclo>
  </ciclos>
  <modulos>
    <modulo id="0228">
      <nombre>Aplicaciones web</nombre>
      <curso>2</curso>
      <horasSemanales>4</horasSemanales>
      <ciclo>SMR</ciclo>
    </modulo>
    <modulo id="0372">
      <nombre>Gestión de bases de datos</nombre>
      <curso>1</curso>
      <horasSemanales>5</horasSemanales>
      <ciclo>ASIR</ciclo>
    </modulo>
    <modulo id="0373">
      <nombre>Lenguajes de marcas y sistemas de gestión de información</nombre>
      <curso>1</curso>
      <horasSemanales>3</horasSemanales>
      <ciclo>ASIR</ciclo>
      <ciclo>DAW</ciclo>
    </modulo>
    <modulo id="0376">
      <nombre>Implantación de aplicaciones web</nombre>
      <curso>2</curso>
      <horasSemanales>5</horasSemanales>
      <ciclo>ASIR</ciclo>
    </modulo>
  </modulos>
</ies>

XSL

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

<xsl:template match="/">
  <html>
  <body>
  <h2>Ciclos</h2>
  <table border="1">
    <tr bgcolor="#9acd32">
      <th>Ciclo</th>
    </tr>
    <xsl:for-each select="ies/modulos/modulo[nombre = 'Lenguajes de marcas y sistemas de gestión de información']">
      <xsl:for-each select="ciclo">
        <tr>
          <td><xsl:value-of select="."/></td>
        </tr>
      </xsl:for-each>
    </xsl:for-each>
  </table>
  </body>
  </html>
</xsl:template>
</xsl:stylesheet>

Результат

<html>
   <body>
      <h2>Ciclos</h2>
      <table border="1">
         <tr bgcolor="#9acd32">
            <th>Ciclo</th>
         </tr>
         <tr>
            <td>ASIR</td>
         </tr>
         <tr>
            <td>DAW</td>
         </tr>
      </table>
   </body>
</html>

Ответы [ 2 ]

3 голосов
/ 29 января 2020

Измените это:

  <xsl:for-each select="ciclo">
    <tr>
      <td><xsl:value-of select="."/></td>
    </tr>
  </xsl:for-each>

на:

  <xsl:for-each select="ciclo">
    <tr>
      <td><xsl:value-of select="/ies/ciclos/ciclo[@id=current()]/nombre"/></td>
    </tr>
  </xsl:for-each>

Обратите внимание : current() функция для ссылки на текущий контекст узла XSLT внутри других контекстов XPath. Также вы можете использовать xsl:key инструкцию и key() функцию.

2 голосов
/ 29 января 2020

Вы можете использовать xsl:key, чтобы получить nombre из ciclos.
Добавьте этот ключ на верхнем уровне

<xsl:key name="keyCiclos" match="ciclos/ciclo" use="@id" />

, а затем измените внутренний for-l oop до

<tr>
  <td><xsl:value-of select="key('keyCiclos',.)/nombre"/></td>
</tr>
...