XSLT:检查TAG名称是否为值

时间:2017-03-15 12:08:56

标签: html xml xslt

我正在尝试创建一个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;
&#13;
&#13;

这是XSL检查:

&#13;
&#13;
<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;
&#13;
&#13;

但这不起作用。

4 个答案:

答案 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>