如何从 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>
</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>
</xsl:text>
<xsl:text>Note: </xsl:text>
<xsl:value-of select="./leistungen/[noten/note=$veranstaltungsnummer]"/>
<xsl:text>
</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>
</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>
来处理学生。
`
我想从某个 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>
</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>
</xsl:text>
<xsl:text>Note: </xsl:text>
<xsl:value-of select="./leistungen/[noten/note=$veranstaltungsnummer]"/>
<xsl:text>
</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>
</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>
来处理学生。
`