имеющий шаблон l oop через потомков дочерних узлов XSLT - PullRequest
1 голос
/ 07 апреля 2020

Я очень новичок в XML / XSLT, и мне трудно разобраться в цикле по root - дочерним узлам и потомкам дочерних узлов.

Например, у меня есть файл XML, который связан с моим XSL-файлом, и в этом файле XML есть несколько дочерних узлов с потомками в нем. см. ниже

<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="TEST.xsl"?>
<student>
          <alumno id="001">
                    <nombre>Samuel</nombre>
                    <apellido>Van Bladel</apellido>
                    <email>Samuelvanbladel@gmail.com</email>
                    <foto><img width="800" height="800" alt="bla bla" src="test.png"/></foto> 
                    <expediente>NX0001R</expediente>
                    <curso>1</curso> 

                        <modulos>
                              <modulo1>
                                  <modulonom>daw1</modulonom>
                                  <nota>10</nota>
                                  <comentario>Muy bien hecho hasta el techo</comentario>
                              </modulo1>

                              <modulo2>
                                 <modulonom>daw2</modulonom>
                                  <nota>10</nota>
                                  <comentario>Muy bien hecho hasta el techo</comentario>                              
                              </modulo2>
                        </modulos>
         </alumno>
  </student>

Я понимаю, что иерархия здесь представляет собой student / alumno / modulos / modulo1 или modulo2, но когда я хотел бы провести l oop через них в моем XSL, я могу до ученика / выпускника или если Я выбираю студента / выпускника / по модулю я могу l oop по модулю, но я теряю информацию в alumno (имя, фамилия и т. Д. 1024 *), которую, как я понимаю, ожидают, потому что я внутри Модулоса, но я хотел бы знать, как я могу получить их, чтобы пройти через все вместе. XSL ниже:

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:template match="/">
<html>
<body>
<xsl:apply-templates/>
</body> 
</html>
</xsl:template>
<xsl:template match="alumno">
<p>
<xsl:apply-templates select="nombre"/>
<xsl:apply-templates select="apellido"/>
<xsl:apply-templates select="curso"/>
<xsl:apply-templates select="modulonom"/>
<xsl:apply-templates select="nota"/>
<xsl:apply-templates select="comentario"/>
</p>
</xsl:template>

<xsl:template match="nombre">
Nombre: <span style="color:#ff0000">
<xsl:value-of select="."/></span>
<br />
</xsl:template>

<xsl:template match="apellido">
Apellido: <span style="color:#00ff00">
<xsl:value-of select="."/></span>
<br />
</xsl:template>

<xsl:template match="curso">
Curso: <span style="color:#00ff00">
<xsl:value-of select="."/></span>
<br />
</xsl:template>


<xsl:template match="modulonom">
Nombre Modulo: <span style="color:#00ff00">
<xsl:for-each select="."/></span>
<br />
</xsl:template>

<xsl:template match="nota">
Nota: <span style="color:#00ff00">
<xsl:for-each select="."/></span>
<br />
</xsl:template>

<xsl:template match="comentario">
Comentario: <span style="color:#00ff00">
<xsl:for-each select="."/></span>
<br />
</xsl:template>


</xsl:stylesheet>


XML теперь отображается в браузере:

Номер: Сэмюэль Апеллидо: Ван Бладель Курсо: 1

Но я хотел бы видеть вся информация в узле

Основной вопрос поста: 1. Почему не отображается "modulonom" / nota / "comentario", которые находятся под узлом "Alumno". 2. Из того, что я вижу, это может быть как-то связано с текущим узлом, в котором он находится, это Alumno, но Modulos находится внутри alumno, и именно здесь возникает мой вопрос. 3. Как исправить это, если это возможно?

Большое спасибо уже

1 Ответ

0 голосов
/ 07 апреля 2020

Короткий ответ: ваша инструкция:

<xsl:apply-templates select="comentario"/>

выдается из контекста alumno, а comentario не является потомком alumno. Поэтому шаблон соответствия comentario никогда не применяется.

Более длинный ответ зависит от того, что вы хотите получить в качестве результата - но вы не ответили на мой вопрос по этому поводу. В общем, я бы предложил вам изучить модель обработки XSLT .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...