如何从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

查看:172
本文介绍了如何从xml标签获取值以交给变量并比较for-each循环中的值的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我希望从某个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>&#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>

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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆