我正在尝试创建一个XSLT,它必须检查value
是否等于' 0'如果@name
等于'总计'。
我认为name()
只能抓住' SUMMA',那么我怎样才能抓住' NIMI =" TOTAL"' ?
这是XML:
<DOKUMENTTI>
<LASKU>
<SUMMAT>
<SUMMA NIMI="Mileage allowances" FMT="0,00" TYYPPI="CURRENCY">0</SUMMA>
<SUMMA NIMI="Expenses" FMT="0,00" TYYPPI="CURRENCY">0</SUMMA>
<SUMMA NIMI="Total" FMT="0,00" TYYPPI="CURRENCY">0</SUMMA>
<SEPARATOR/>
<SUMMA NIMI="Reimbursable" FMT="0,00" TYYPPI="CURRENCY">0</SUMMA>
<SUMMA NIMI="Taxable" FMT="0,00" TYYPPI="CURRENCY">0</SUMMA>
<SUMMA NIMI="Advances" FMT="0,00" TYYPPI="CURRENCY">0</SUMMA>
<SUMMA NIMI="Payable" FMT="0,00" TYYPPI="CURRENCY">0</SUMMA>
</SUMMAT>
</LASKU>
</DOKUMENTTI>
&#13;
这是XSL检查:
<xsl:for-each select="DOKUMENTTI/LASKU/SUMMAT[SUMMA='0']">
<xsl:if test="name() = 'Total'">
<message class="3">
Total can't be 0
</message>
</xsl:if>
</xsl:for-each>
&#13;
但这不起作用。
答案 0 :(得分:0)
我认为这段代码有帮助
<xsl:for-each select="DOKUMENTTI/LASKU/SUMMAT/SUMMA">
<xsl:if test="@NIMI = 'Total'">
<message class="3">Total can't be 0</message>
</xsl:if>
</xsl:for-each>
答案 1 :(得分:0)
据我所知,你想检查两个条件。 Nimi将成为&#39; Total&#39;和值为0。
首先遍历所有SUMMA元素。
<xsl:for-each select="DOKUMENTTI/LASKU/SUMMAT/SUMMA">
<xsl:if test="(./@NIMI = 'Total') and (. = '0')">
<message class="3">Total can't be 0</message>
</xsl:if>
</xsl:for-each>
答案 2 :(得分:0)
尝试一下:
<xsl:for-each select="DOKUMENTTI/LASKU/SUMMAT/SUMMA[@NIMI = 'Total' and . = '0']">
<message class="3">Total can't be 0</message>
</xsl:for-each>
如果整个文档中只有一个Total
,您还可以使用xsl:if
代替for-each
:
<xsl:if select="DOKUMENTTI/LASKU/SUMMAT/SUMMA[@NIMI = 'Total'] = '0'">
<message class="3">Total can't be 0</message>
</xsl:if>
答案 3 :(得分:0)
我认为这会对你有所帮助,因为我已经从我身边测试过了。
<?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:template match="DOKUMENTTI">
<xsl:apply-templates/>
</xsl:template>
<xsl:template match="LASKU">
<xsl:apply-templates/>
</xsl:template>
<xsl:template match="SUMMAT">
<xsl:for-each select="./SUMMA">
<xsl:if test="@NIMI eq 'Total' and normalize-space(.) eq '0'">
<message class="3">Total can't be 0</message>
</xsl:if>
</xsl:for-each>
</xsl:template>
</xsl:stylesheet>