如何从 xml 标记中获取值以移交给变量并比较 for-each 循环中的值

how get a value from xml tag to hand over to a variable and to compare the value in a for-each loop

我想从某个 xml 标签中获取一个值并移交给一个变量,以便在 for-each 循环中比较相同的值。

xsl代码理解我截图了:

我为 xml 代码理解做了一个截图:

Here 是我的 xsltransform 代码示例。

这是我的XML代码:

<?xml version="1.0" encoding="UTF-8"?>
<unidatenbank>
    <studenten>
    <student>
        <daten>
            <matrikelnummer>2354444</matrikelnummer>
            <vorname>Horst</vorname>
            <nachname>Wallenstein</nachname>
            <geburtsdatum>09.09.1999</geburtsdatum>
            <studiengang>Politikwissenschaft</studiengang>
        </daten>
        <leistungen>
            <creditpoints>178</creditpoints>
            <noten>
                <note veranstaltungsnummer="754125">1.7</note>
                <note veranstaltungsnummer="452781">2.7</note>
            </noten>
        </leistungen>
    </student>
    <student>
        <daten>
            <matrikelnummer>2367897</matrikelnummer>
            <vorname>Isabella</vorname>
            <nachname>Gans</nachname>
            <geburtsdatum>08.08.1988</geburtsdatum>
            <studiengang>Politikwissenschaft</studiengang>
        </daten>
        <leistungen>
            <creditpoints>190</creditpoints>
            <noten>
                <note veranstaltungsnummer="754125">1.0</note>
                <note veranstaltungsnummer="452781">1.7</note>
            </noten>
        </leistungen>
    </student>
    </studenten>
    <veranstaltungen>
        <veranstaltung>
            <veranstaltungsnummer>754125</veranstaltungsnummer>
            <dozent>Prof. Dr. Schnatterberg</dozent>
            <modul>EM 1</modul>
        </veranstaltung>
        <veranstaltung>
            <veranstaltungsnummer>452781</veranstaltungsnummer>
            <dozent>Dr. Hummels</dozent>
            <modul>EM 2</modul>
        </veranstaltung>
    </veranstaltungen>
</unidatenbank>

这是我的 XSL 代码:

    <?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
    xmlns:xs="http://www.w3.org/2001/XMLSchema"
    exclude-result-prefixes="xs"
    version="2.0">
    <xsl:output method="text"/>
    <xsl:template match="/unidatenbank">
      <xsl:for-each select="//veranstaltungen/veranstaltung">
          <xsl:sort lang="de" select="veranstaltungsnummer"/> 
          <xsl:text>Veranstaltungsnummer: </xsl:text>
          <xsl:value-of select="./veranstaltungsnummer"/>
          <xsl:variable name="veranstaltungsnummer" select="./veranstaltungsnummer"/>
          <xsl:text>&#xA;</xsl:text>
          <ul>
              <xsl:for-each select="//studenten/student">
                  <xsl:sort lang="de" case-order="upper-first" select="./daten/matrikelnummer"/>
                  <li>
                      <xsl:text>Matrikelnummer: </xsl:text>
                      <xsl:value-of select="./daten/matrikelnummer"/>
                      <xsl:text>&#xA;</xsl:text>
                      <xsl:text>Note: </xsl:text>
                      <xsl:value-of select="./leistungen/[noten/note=$veranstaltungsnummer]"/>
                      <xsl:text>&#xA;</xsl:text>
                      <!--<xsl:text>Gesamtdurchschnitt: </xsl:text>
                      <xsl:variable name="leistungen" select="avg(./leistungen/noten/note[])" />
                      <xsl:value-of select="format-number($leistungen, '#.##0,0')"/>-->
                  </li>
              </xsl:for-each>
          </ul>
          <xsl:text>&#xA;</xsl:text>
      </xsl:for-each>
       </xsl:template> 
</xsl:stylesheet>

希望有人理解我:)

我建议定义一个键 <xsl:key name="vnr" match="studenten/student" use="leistungen/noten/note/@veranstaltungsnummer""/> 然后使用 <xsl:for-each select="key('vnr', veranstaltungsnummer)">... </xsl:for-each> 来处理学生。

`