对于我定义的变量,我将从每个组的标签中获取一个值。这个变量我想用来从另一个标签中获取价值。
首先,我从xml中截取屏幕截图以了解:
这是我的xslt代码中的截图,用于理解:
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>
<veranstaltungstitel>Einführung in die Politikwissenschaft</veranstaltungstitel>
<dozent>Prof. Dr. Schnatterberg</dozent>
<modul>EM 1</modul>
</veranstaltung>
<veranstaltung>
<veranstaltungsnummer>452781</veranstaltungsnummer>
<veranstaltungstitel>Theorien der Politik</veranstaltungstitel>
<dozent>Dr. Hummels</dozent>
<modul>EM 2</modul>
</veranstaltung>
</veranstaltungen>
</unidatenbank>
XSLT代码:
<xsl:stylesheet version="2.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
exclude-result-prefixes="xs">
<xsl:output method="text"/>
<xsl:param name="matrikelnummer" select="2367897"/>
<xsl:template match="/unidatenbank">
<xsl:for-each-group select="studenten/student[daten/matrikelnummer=$matrikelnummer]" group-by="daten">
<xsl:text>Persönlicher Transkript:
</xsl:text>
<xsl:value-of select="vorname"/>
<xsl:value-of select="current-grouping-key()" />
</xsl:for-each-group>
<xsl:for-each-group select="veranstaltungen" group-by="veranstaltung">
<xsl:variable name="veranstaltungsnummer" select="./veranstaltungsnummer"/>
<xsl:value-of select="current-grouping-key()" />
<xsl:text>Note:
</xsl:text>
<xsl:value-of select="$veranstaltungsnummer"/>
<xsl:for-each select="studenten/student">
<xsl:value-of select="./leistungen/noten/note[@veranstaltungsnummer=$veranstaltungsnummer]"/>
</xsl:for-each>
</xsl:for-each-group>
</xsl:template>
</xsl:stylesheet>
Here是我的xsltransform代码示例。
我会得到这个输出:
Persönlicher Transkript:
2367897
Isabella
Gans
08.08.1988
Politikwissenschaft
754125
Einführung in die Politikwissenschaft
Prof. Dr. Schnatterberg
EM 1
Note: 1.0
452781
Theorien der Politik
Dr. Hummels
EM 2
Note: 1.7
答案 0 :(得分:0)
正如评论中所提到的,当每个学生(可能)只有一个记录时,你是否试图对学生进行分组并不清楚,看起来你传递一个参数来得到一个特定的学生。所以,你可以做到这一点
<xsl:for-each select="studenten/student[daten/matrikelnummer=$matrikelnummer]" >
然后,您对veranstaltungen
个节点进行分组,但看起来只有其中一个节点,所以您可能真的是指子veranstaltung
个元素。同样,看起来你不需要对它们进行分组。就这样做
<xsl:for-each select="veranstaltungen/veranstaltung">
在回答您的问题时,要从note
获取student
,您可以定义密钥
<xsl:key name="student" match="student" use="daten/matrikelnummer" />
然后您可以使用该密钥查找当前note
的{{1}},如此
veranstaltung
试试这个XSLT(请注意,为了简化事情,它不会输出学生的所有字段。)
<xsl:value-of select="key('student',string($matrikelnummer))
/leistungen/noten/note[@veranstaltungsnummer = $veranstaltungsnummer]" />
话虽如此,我不确定你是否需要迭代<xsl:stylesheet version="2.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
exclude-result-prefixes="xs">
<xsl:output method="text"/>
<xsl:param name="matrikelnummer" select="2367897"/>
<xsl:key name="student" match="student" use="daten/matrikelnummer" />
<xsl:template match="/unidatenbank">
<xsl:for-each select="studenten/student[daten/matrikelnummer=$matrikelnummer]" >
<xsl:text>Persönlicher Transkript: </xsl:text>
<xsl:value-of select="daten/vorname"/>
<xsl:text> </xsl:text>
<xsl:value-of select="$matrikelnummer" />
<xsl:text> </xsl:text>
</xsl:for-each>
<xsl:for-each select="veranstaltungen/veranstaltung">
<xsl:variable name="veranstaltungsnummer" select="veranstaltungsnummer"/>
<xsl:value-of select="$veranstaltungsnummer" />
<xsl:text> </xsl:text>
<xsl:text>Note: </xsl:text>
<xsl:value-of select="key('student', string($matrikelnummer))/leistungen/noten/note[@veranstaltungsnummer = $veranstaltungsnummer]" />
<xsl:text> </xsl:text>
<xsl:text> </xsl:text>
</xsl:for-each>
</xsl:template>
</xsl:stylesheet>
元素。您可以嵌套veranstaltung
并迭代xsl:for-each
元素。试试这个XSLT:
note