【发布时间】:2021-04-03 19:01:40
【问题描述】:
对于下面的简化转换表,我想添加以下功能:
- 对于“2019 年营业额”和“2020 年营业额”,我希望在红色徽章中获得低于 1mio 的值,在绿色徽章中获得超过 1mio 的值。我试图为“2019 年营业额”实现这一点,但是我得到一个空白输出。问题似乎出在
<xsl:if test="...">-part 上,因为如果我输入<xsl:value-of select="key('keyToCreditcard', id)/turnover_2019"/>,我确实得到了正确的值(请参阅“2020 年营业额”)。 - 对于“总营业额”,我需要总结“2019 年营业额”和“2020 年营业额”的值。我该怎么做?
XSL:
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:key name="keyToPerson" match="person" use="id"/>
<xsl:key name="keyToCreditcard" match="creditcard" use="cardowner"/>
<xsl:template match="/">
<xsl:for-each select="data/persons/person">
<xsl:if test="turnoverYear1 < 1000000">
<span class="badge bg-warning mx-2"><xsl:value-of select="key('keyToCreditcard', id)/turnoverYear1"/></span>
</xsl:if>
<xsl:if test="turnoverYear1 > 999999.99">
<span class="badge bg-danger mx-2"><xsl:value-of select="key('keyToCreditcard', id)/turnoverYear1"/></span>
</xsl:if>
<xsl:value-of select="key('keyToCreditcard', id)/turnoverYear2"/>
</xsl:for-each>
</xsl:template>
</xsl:stylesheet>
输入:
<data>
<persons>
<person>
<id>1</id>
<name>Jeramie Bischoff</name>
<city>Luzern</city>
<birthdate>04/16/1951</birthdate>
</person>
</persons>
<creditcards>
<creditcard>
<id>1</id>
<cardtype>Visa</cardtype>
<cardnumber>4041592612048990</cardnumber>
<turnoverYear1>952411.33</turnoverYear1>
<turnoverYear2>6135840.0</turnoverYear2>
<cardowner>1</cardowner>
</creditcard>
</creditcards>
</data>
预期输出:
Name:Jeramie Bischoff
City: Luzern
birthdate: 04/16/1951
Card Type: Visa
Card Number: 4041592612048990
Turnover 2019: 952411.33
Turnover 2020: 6135840.0
Total Turnover: 7088251.33
【问题讨论】:
-
没有看到您正在使用的 XML 就无法回答这个问题。
-
请发minimal reproducible example incl。输入和预期输出(作为代码)。
-
另外,您显然有名为
<turnover_2019>和<turnover_2020>的元素。这是个坏主意。如果你能对此做任何事情,那就改变它。如果元素名称中包含数据,这让生活变得变得更加困难。请改用<turnover year="2019">之类的东西。 -
1mio 是 100000 的意思吗?
-
谢谢大家的意见,我现在已经相应地修改了。