如何从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代码的理解做了一个截图:
这里是我的xsltransform代码示例。
这里是我的XML代码:
<?xml version =1.0encoding =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>
<信用点> 190< /信用点>
< noten>
< note veranstaltungsnummer =754125> 1.0< / note>
< note veranstaltungsnummer =452781> 1.7< / note>
< / noten>
< / leistungen>
< / student>
< / studenten>
< veranstaltungen>
< veranstaltung>
< veranstaltungsnummer> 754125< / veranstaltungsnummer>
< dozent> Prof。 Schnatterberg博士< / dozent>
< modul> EM 1< / modul>
< / veranstaltung>
< veranstaltung>
< veranstaltungsnummer> 452781< / veranstaltungsnummer>
< dozent> Dr。赫梅尔< / dozent>
< modul> EM 2< / modul>
< / veranstaltung>
< / veranstaltungen>
< / unidatenbank>
以下是我的XSL代码:
<?xml version =1.0encoding =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 =deselect =veranstaltungsnummer/>
< xsl:text> Veranstaltungsnummer:< / xsl:text>
< xsl:value-of select =./ veranstaltungsnummer/>
< xsl:variable name =veranstaltungsnummerselect =./ veranstaltungsnummer/>
< xsl:text>&#xA;< / xsl:text>
< ul>
< xsl:sort lang =decase-order =upper-firstselect =./ daten / matrikelnummer/>
< li>
< xsl:text> Matrikelnummer:< / xsl:text>
< xsl:value-of select =./ daten / matrikelnummer/>
< xsl:text>&#xA;< / xsl:text>
< xsl:text>注意:< / xsl:text>
< xsl:value-of select =./ leistungen / [noten / note = $ veranstaltungsnummer]/>
< xsl:text>&#xA;< / xsl:text>
<! - < xsl:text> Gesamtdurchschnitt:< / xsl:text>
< xsl:variable name =leistungenselect =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 =vnrmatch =studenten / studentuse =leistungen / noten / note / @然后使用
< xsl:for-each select =key('vnr',veranstaltungsnummer)> ...< / xsl: for-each>
来处理学生。
`
i would like to get a value from certain xml tag and hand over to a variable for compare the same value in for-each loop.
I make a screenshot for the xsl code understanding:
And i make a screenshot for the xml code understanding:
Here is my xsltransform code example.
Here my XML Code:
<?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>
Here is my XSL code:
<?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>
hope someone understanding me :)
I would suggest to define a key <xsl:key name="vnr" match="studenten/student" use="leistungen/noten/note/@veranstaltungsnummer""/>
then use <xsl:for-each select="key('vnr', veranstaltungsnummer)">... </xsl:for-each>
to process the students.
`
这篇关于如何从xml标签获取值以交给变量并比较for-each循环中的值的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!