检查字符串是否为空

时间:2014-05-29 20:58:14

标签: xml xslt xsd

如何使用XSL检查值是否为空? 例如,如果爸爸妈妈空了?

<Hoteis id="1">
        <codigo>458</codigo> 
        <morada>Porto</morada>
        <num_quartos>3</num_quartos>
        <piscina>Não</piscina>
        <restaurante> 
            <dados></dados>
            <num_mesas></num_mesas>
            <num_pessoas></num_pessoas>
            <hora_abertura></hora_abertura>
            <hora_fechar></hora_fechar>
        </restaurante>
</Hoteis>

例如:

<td align="center">
     <xsl:value-of select= "ns:restaurante" >
         <xsl:for-each select="/Hoteis/restaurante">
              <xsl:if teste="dados != ''">
                    <tr bgcolor="#9acd32">
                           <td align="center">Nº Pessoas</td>
                           <td align="center">Nº Mesas</td>
                           <td align="center">Hora Abertura</td>
                           <td align="center">Hora Fechar</td>
                    </tr>
                    <xsl:apply-templates select="//ns:restaurante"/>
               </xsl:if>
          </xsl:for-each>
      </xsl:value-of>
 </td>

我该怎么做?

3 个答案:

答案 0 :(得分:1)

我会说获取字符串的长度,如果它等于0则执行x,否则执行其他操作。已经好几年了,但我会给xpath一个bash:

<xsl:if test="string-length($yourElem) > 0">

答案 1 :(得分:1)

如果你使用test代替teste(除非你有西班牙语葡萄牙语XSLT处理器......?),你的方法就可以了。

就个人而言,我更喜欢:

<xsl:if test="dados/text()">

请注意,此测试是否存在 text 节点,dados的子节点 - 这与测试dados 空的测试不一定相同

答案 2 :(得分:1)

我更喜欢使用的是string()

示例:

XML输入

<Hoteis id="1">
    <codigo>458</codigo> 
    <morada>Porto</morada>
    <num_quartos>3</num_quartos>
    <piscina>Não</piscina>
    <restaurante> 
        <dados></dados>
        <num_mesas></num_mesas>
        <num_pessoas></num_pessoas>
        <hora_abertura></hora_abertura>
        <hora_fechar></hora_fechar>
    </restaurante>
</Hoteis>

XSLT 1.0

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:output method="text"/>
    <xsl:strip-space elements="*"/>

    <xsl:template match="/*">
        <xsl:if test="string(restaurante/dados)">
            <xsl:text>"dados" is not empty.</xsl:text>
        </xsl:if>
        <xsl:if test="not(string(restaurante/dados))">
            <xsl:text>"dados" is empty.</xsl:text>
        </xsl:if>
    </xsl:template>

</xsl:stylesheet>

<强>输出

"dados" is empty.

此外,如果您使用的是xsl:strip-space,并且xsl:preserve-space中未列出该元素,则会忽略空格。例如,如果dados只有空格(<dados> </dados>),它也会显示为空。